Closed AArnott closed 3 years ago
Same issue on my side. It's not pretty but adding an AssemblyResolve
seems to work:
AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
{
var filePath = Path.Combine(latestInstance.MSBuildPath, $"{new AssemblyName(e.Name).Name}.dll");
if (File.Exists(filePath))
{
return Assembly.LoadFrom(filePath);
}
return null;
};
Please note that depending on the version of Microsoft.Build
package used and the msbuild.exe
targetted I have also seen different errors involving System.Collections.Immutable.dll
, System.IO.Compression.dll
or System.Memory
.
Was this fixed by #94?
I think I tested the pre-release version that should have contained the fix and I still had issues. It might have been on different assembly though.
Why do we keep a fixed list of MsBuild assemblies? Why don't we just load if it's found in the MsBuild directory? It seems more future-proof to me.
Why do we keep a fixed list of MsBuild assemblies? Why don't we just load if it's found in the MsBuild directory? It seems more future-proof to me.
A very reasonable question. I can imagine it would be worse for perf, since a lot of that stuff isn't really MSBuild's, but I doubt that would be a huge factor, and it would certainly be more convenient and future-proof. I put a change here. We'll see how it goes. 🙂
@forgind: No.
I locally built master (d007e5e6f7) and tested it against my original repro (https://github.com/dotnet/Nerdbank.GitVersioning.git 0f97225) and ran the AssemblyInfo
test. The error changed from a missing Unsafe dll to this one:
Message:
System.AggregateException : A directory or directories in "msbuildSearchPaths" do not exist
Stack Trace:
MSBuildLocator.RegisterMSBuildPath(String[] msbuildSearchPaths)
MSBuildLocator.RegisterMSBuildPath(String msbuildPath)
MSBuildLocator.RegisterInstance(VisualStudioInstance instance)
MSBuildLocator.RegisterDefaults()
MSBuildExtensions.LoadMSBuild() line 26
MSBuildFixture.ctor() line 5
I think that error has now been fixed.
Confirmed. As of 23fb66e50a36d6 the test passes now.
My unit tests which use the MSBuildLocator started failing recently when MSBuild 16.7 came out with the failure below.
The Microsoft.Build.dll that is loaded by MSBuildLocator has
System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0
next to it. I don't have any version of that assembly in my test output directory. Shouldn't the MSBuildLocator's assembly resolver find all of the msbuild's dependencies including this one?