Msbuild 如何访问dotnet build任务中的包引用
是否可以在运行dotnet Build的Microsoft Build任务中使用类似Microsoft.CodeAnalysis的包引用 我正在对任务库和以下包引用使用Msbuild 如何访问dotnet build任务中的包引用,msbuild,.net-core,msbuild-task,Msbuild,.net Core,Msbuild Task,是否可以在运行dotnet Build的Microsoft Build任务中使用类似Microsoft.CodeAnalysis的包引用 我正在对任务库和以下包引用使用netstandard1.5: <PackageReference Include="Microsoft.Build" Version="15.3.0-preview-000117-01" /> <PackageReference Include="Microsoft.Build.Utilities.Core"
netstandard1.5
:
<PackageReference Include="Microsoft.Build" Version="15.3.0-preview-000117-01" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.3.0-preview-000117-01" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="2.2.0" />
消费项目是一个netcoreapp1.1
。任务失败,出现错误
该“MyTask”任务意外失败。
System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.CodeAnalysis,版本=2.2.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。
文件名:“Microsoft.CodeAnalysis,版本=2.2.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35”
例外
尝试通过AssemblyLoadContext.Default.LoadFromAssemblyPath加载包引用时,我得到
无法加载文件或程序集“Microsoft.CodeAnalysis,版本=2.2.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35”。
没有任何附加信息。这在.net核心控制台应用程序中运行时也不起作用。我尝试了第二个(更简单的)包,它可以通过.net核心控制台应用程序中的LoadFromAssemblyPath
加载,但在作为dotnet构建任务运行时仍然不起作用
当在控制台应用程序中使用Assembly.LoadFile
在经典net4.6中运行时,以及作为任务运行时,可以加载这两个程序集。不幸的是,任务DLL无法引用任何包-它们加载到正在运行的msbuild实例中,并且只能引用宿主可用的DLLmsbuild实例。可以通过.net core中的AssemblyLoadContext
或.net framework中的AppDomain.Load()
加载任何其他DLL。未对任务的dll文件执行依赖项解析,这也意味着可能与已加载的dll、msbuild的不同部分或其他任务存在冲突。在.NET Framework MSBuild中,任务可以隔离到其自己的AppDomain,但此机制在.NET Core上不可用。谢谢您的回答。我修改了我的问题,使之更一般。知道为什么AssemblyLoadContext.Default.LoadFromAssemblyPath
在作为dotnet构建任务运行时不起作用吗?