Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FileNotFoundException for System.Memory when using Visual Studio Build Tools 2017 #589

Closed
KalleOlaviNiemitalo opened this issue Apr 15, 2021 · 7 comments · Fixed by #590
Closed
Assignees
Labels
Milestone

Comments

@KalleOlaviNiemitalo
Copy link

I tried to upgrade Nerdbank.GitVersioning from 3.3.37 to 3.4.194 but got a System.IO.FileNotFoundException for the System.Memory assembly. This is with MSBuild.exe ("Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework") installed as part of Visual Studio Build Tools 2017 version 15.9.34, on Windows Server 2012 R2.

Project "C:\REDACTED.csproj.metaproj" (10:42) is building "C:\REDACTED.csproj" (11:9) on node 1 (default targets).
Project "C:\REDACTED.csproj" (11:9) is building "C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets" (127) on node 1 (GetBuildVersion_Properties target(s)).
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018: The "Nerdbank.GitVersioning.Tasks.GetBuildVersion" task failed unexpectedly.
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018: System.IO.FileNotFoundException: Could not load file or assembly 'System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018: File name: 'System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018:    at Nerdbank.GitVersioning.ManagedGit.GitRepository..ctor(String workingDirectory, String gitDirectory, String commonDirectory, String objectDirectory)
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018:    at Nerdbank.GitVersioning.ManagedGit.GitRepository.Create(String workingDirectory)
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018:    at Nerdbank.GitVersioning.Managed.ManagedGitContext..ctor(String workingDirectory, String dotGitPath, String committish)
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018:    at Nerdbank.GitVersioning.GitContext.Create(String path, String committish, Boolean writable)
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018:    at Nerdbank.GitVersioning.Tasks.GetBuildVersion.ExecuteInner()
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018:    at MSBuildExtensionTask.ContextAwareTask.Execute()
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018: 
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018: WRN: Assembly binding logging is turned OFF.
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018: To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018: Note: There is some performance penalty associated with assembly bind failure logging.
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018: To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets(17,5): error MSB4018: 
Done Building Project "C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\Nerdbank.GitVersioning.Inner.targets" (GetBuildVersion_Properties target(s)) -- FAILED.
Done Building Project "C:\REDACTED.csproj" (default targets) -- FAILED.
Project "C:\REDACTED.csproj.metaproj" (10:42) is building "C:\REDACTED.csproj" (5:81) on node 1 (default targets).

Process Monitor shows it loads C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\MSBuildFull\Nerdbank.GitVersioning.Tasks.dll and not C:\Users\REDACTED\.nuget\packages\nerdbank.gitversioning\3.4.194\build\MSBuildCore\Nerdbank.GitVersioning.Tasks.dll. That seems correct to me.

"C:\Users\REDACTED.nuget\packages\nerdbank.gitversioning\3.4.194\build\MSBuildFull\NerdBank.GitVersioning.dll" references the missing assembly:

.assembly extern System.Memory
{
  .publickeytoken = (CC 7B 13 FF CD 2D DD 51 )                         // .{...-.Q
  .ver 4:0:1:1
}
@KalleOlaviNiemitalo
Copy link
Author

Upgrading Visual Studio Build Tools 2017 from version 15.9.34 to version 15.9.35 does not help.

@KalleOlaviNiemitalo
Copy link
Author

The same error occurs with Microsoft Visual Studio Professional 2017 version 15.9.35.

Adding NBGV_GitEngine=LibGit2 to the process environment avoids the error, so I think the issue relates to #521. I can easily add such an environment variable in our continuous integration system, but I don't think it is feasible to deploy to developer workstations.

Setting <NBGV_GitEngine>LibGit2</NBGV_GitEngine> in Directory.Build.props does not help. Perhaps MSBuild reads Directory.Build.props too late.

This issue is blocking my upgrade.

@KalleOlaviNiemitalo
Copy link
Author

There is no System.Memory.dll file in the C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\ directory. The only System.*.dll files in that directory are:

  • System.Collections.Immutable.dll assembly version 1.2.3.0
  • System.IO.Compression.dll assembly version 4.1.2.0; MSBuild.exe.config redirects to this version
  • System.Runtime.InteropServices.RuntimeInformation.dll assembly version 4.0.1.0; MSBuild.exe.config redirects to this version
  • System.Threading.Tasks.Dataflow.dll assembly version 4.5.24.0

If System.Memory.dll is installed with MSBuild 16 but not with MSBuild 15, then perhaps Nerdbank.GitVersioning.Common.targets could use $(MSBuildRuntimeType) and $(MSBuildVersion) to choose a default value for NBGV_GitEngine.

@AArnott AArnott added this to the v3.4 milestone Apr 15, 2021
@AArnott AArnott added the bug label Apr 15, 2021
@AArnott AArnott self-assigned this Apr 15, 2021
AArnott added a commit that referenced this issue Apr 15, 2021
AArnott added a commit that referenced this issue Apr 15, 2021
AArnott added a commit that referenced this issue Apr 15, 2021
Several assemblies are required by this msbuild task but are not included in MSBuild 2017.

Adding the assemblies to the package alone is not enough, since binding redirects are also missing in msbuild.exe.config. We make up for this with a custom assembly resolver.

Fixes #589
AArnott added a commit that referenced this issue Apr 15, 2021
Several assemblies are required by this msbuild task but are not included in MSBuild 2017.

Adding the assemblies to the package alone is not enough, since binding redirects are also missing in msbuild.exe.config. We make up for this with a custom assembly resolver.

Fixes #589
@AArnott AArnott linked a pull request Apr 15, 2021 that will close this issue
@AArnott AArnott closed this as completed Apr 15, 2021
@KalleOlaviNiemitalo
Copy link
Author

I tested that Nerdbank.GitVersioning 3.4.196-ge22f3b6a14 fixes the problem.

@KalleOlaviNiemitalo
Copy link
Author

However, now that you are shipping additional Microsoft DLLs in the nupkg, I wonder whether they require adding some legal text as well. Perhaps it is enough that the version resources of the DLLs themselves carry Microsoft copyright notices, and that Nerdbank.GitVersioning.nuspec contains <license type="expression">MIT</license> which apparently matches how Microsoft licenses those DLLs.

@AArnott
Copy link
Collaborator

AArnott commented Apr 22, 2021

Thanks for confirming.
I was already shipping some dll's from .NET. This just adds to that set. But adding a 3rdPartyNotices.txt file to the built package is a good idea. I'll open a new issue for that.

@KalleOlaviNiemitalo
Copy link
Author

Tested that Nerdbank.GitVersioning 3.4.203 likewise works fine with Visual Studio Build Tools 2017 and Visual Studio Professional 2017.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants