是否可以在使用dotnet build运行的Microsoft Build Task中使用Microsoft.CodeAnalysis等软件包引用?
我使用certutil -user -p PASSWORD -importPFX FakeCorp.com.pfx
作为任务库和以下软件包引用:
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
异常。
尝试通过The "MyTask" task failed unexpectedly.
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.CodeAnalysis, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.CodeAnalysis, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
加载包引用时,我得到了
AssemblyLoadContext.Default.LoadFromAssemblyPath
没有任何其他信息。在.net核心控制台应用程序中运行时,这不起作用。我尝试了第二个(更简单的)程序包,可以通过。Could not load file or assembly 'Microsoft.CodeAnalysis, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.
在.net核心控制台应用程序中加载,但是当它作为dotnet构建任务运行时它仍然不起作用。
在控制台应用程序中运行带有LoadFromAssemblyPath
的经典net4.6以及作为Task运行时,可以加载这两个程序集。
答案 0 :(得分:1)
不幸的是,任务dll无法引用任何软件包 - 它们被加载到正在运行的msbuild实例中,并且只能引用托管msbuild实例可用的dll。任何其他DLL都可以通过.net核心中的AssemblyLoadContext
或.net框架中的AppDomain.Load()
加载。没有为任务的dll文件执行依赖项解析,这也意味着可能与已加载的dll,msbuild的不同部分或其他任务存在冲突。在.NET Framework MSBuild中,任务可以与自己的AppDomain隔离,但.NET Core上不提供此机制。