如何在任务中访问dotnet构建中的包引用

时间:2017-06-08 11:33:15

标签: msbuild .net-core msbuild-task

是否可以在使用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运行时,可以加载这两个程序集。

1 个答案:

答案 0 :(得分:1)

不幸的是,任务dll无法引用任何软件包 - 它们被加载到正在运行的msbuild实例中,并且只能引用托管msbuild实例可用的dll。任何其他DLL都可以通过.net核心中的AssemblyLoadContext或.net框架中的AppDomain.Load()加载。没有为任务的dll文件执行依赖项解析,这也意味着可能与已加载的dll,msbuild的不同部分或其他任务存在冲突。在.NET Framework MSBuild中,任务可以与自己的AppDomain隔离,但.NET Core上不提供此机制。