使用MSBuild,以下内容可以很好地构建和工作:
<PackageReference Include="Publicise.MSBuild.Task" Version="1.3.0"/>
<Target Name="Publicise" BeforeTargets="BeforeBuild">
<Publicise
AssemblyPath="..."
OutputPath="../"/>
</Target>但是,当我添加另一个包引用(不更改任何其他)时,它在构建时会遇到错误:
<PackageReference Include="Publicise.MSBuild.Task" Version="1.3.0"/>
<PackageReference Include="ILRepack.MSBuild.Task" Version="2.0.13"/>这会导致错误MSB4062:
无法从程序集...\ILRepack.MSBuild.Task.dll加载"Publicise“任务。确认声明是正确的,程序集及其所有依赖项都可用,任务包含实现Microsoft.Build.Framework.ITask的公共类。
为什么有完全不同的东西阻止任务被正确地找到,我怎样才能解决这个问题?
发布于 2021-01-04 06:29:17
这个问题是由这两个msbuild任务nuget包意外造成的。
和,因为您已经安装了ILRepack.MSBuild.Task nuget包的末尾。而PackageReference节点ILRepack.MSBuild.Task的末端是akways节点。因此,$(TaskAssembly)总是从ILRepack.MSBuild.Task nuget包加载,而来自publicise.msbuild.task的值正在被覆盖。The "Publicise" task could not be loaded from the assembly ILRepack.MSBuild.Task.dll的问题是有意义的。
C:\Users\xxx\.nuget\packages\publicise.msbuild.task\1.3.0\build\Publicise.MSBuild.Task.props

C:\Users\xxx\.nuget\packages\ilrepack.msbuild.task\2.0.13\build\ILRepack.MSBuild.Task.props

也是,当项目加载nuget包时,您可以在C:\xxx\source\repos\xxx(project_name)\xxx(project_name)\obj\xxx.csproj.nuget.g.props下面检查

加载ILRepack.MSBuild.Task.props总是在末尾,而$(TaskAssembly)总是从ilrepack.msbuild.task开始的,这是因为后面安装的包覆盖了它。
可以理解Publicise任务(应该来自publicise.msbuild.task)来自ilrepack.msbuild.task的错误。
溶液
所以你应该在最后做publicise.msbuild.task。
解决方案1)
打开C:\xxx\source\repos\xxx(project_name)\xxx(project_name)\obj\xxx.csproj.nuget.g.props文件,
修改如下:
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)ilrepack.msbuild.task\2.0.13\build\ILRepack.MSBuild.Task.props" Condition="Exists('$(NuGetPackageRoot)ilrepack.msbuild.task\2.0.13\build\ILRepack.MSBuild.Task.props')" />
<Import Project="$(NuGetPackageRoot)publicise.msbuild.task\1.3.0\build\Publicise.MSBuild.Task.props" Condition="Exists('$(NuGetPackageRoot)publicise.msbuild.task\1.3.0\build\Publicise.MSBuild.Task.props')" />
</ImportGroup>让Publicise.MSBuild.Task.props在臀部。
然后,保存更改,然后单击Build按钮而不是重构按钮再次测试。
解决方案2)
将ILRepack.MSBuild.Task nuget软件包降级为2.0.0版本。
===============================
更新1
谢谢你分享你对解决办法的看法。因为这两个nuget包必须在您的项目中使用,所以这两个解决方案可能不是很有用。
错误、冲突是由nuget包的作者引起的,顺便说一句,您同时从这两个nuget包中使用了相同的TaskAssembly属性。
TreatAsLocalProperty="TaskAssembly"不会解决这个问题。nuget包中的<packages_id>.props文件仍然嵌入到项目的CSPROj文件中。字段是否与TaskAssembly相同,还是会发生冲突。
更好的解决方案是将nuget包的一个TaskAssembly重命名为另一个,这不会引起冲突。
1)打开C:\Users\xxx\.nuget\packages\ilrepack.msbuild.task\2.0.13\build\ILRepack.MSBuild.Task.props文件:
将TaskAssembly属性更改为另一个属性,如TaskAssembly_copy

https://stackoverflow.com/questions/65553940
复制相似问题