我有一个定制的发布过程,它首先通过ILRepack将一些程序集合并成一个程序集,然后执行其他一些步骤,最后清理发布目录--从APP_NAME.deps.json、相关程序集和符号文件中删除合并的依赖项。
为了实现最后一步,我创建了一个带有自定义MsBuild任务的MsBuild包。根据内特的博客文章,我已经设置了PrivateAssets="All"
,以便在包中发布所有任务的依赖项:
<ItemGroup>
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.9.20" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Update="@(PackageReference)" PrivateAssets="All" />
</ItemGroup>
包布局如下所示:
突然间,在发布期间,此步骤失败时出错:
任务意外失败。无法加载文件或程序集'Newtonsoft.Json,Version=12.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed‘。无法找到或加载特定文件。(0x80131621)
我不明白为什么任务尝试加载12.0.0.0版本,而我有Newtonsoft.Json 12.0.2 (如PackageReference中所指定的)。
谢谢你的帮助!
更新:
根据这个msbuild规范,当前MSBuild任务有严重的限制:
MSBuild中的任务是具有潜在分离和冲突依赖树的动态加载程序集。目前,MSBuild on .NET Core在任务之间没有隔离,因此只能加载任何给定程序集的一个版本。这方面的主要例子是Newtonsoft.Json,它有多个版本,但所有任务都必须同意才能工作。
发布于 2019-10-07 09:56:14
解决办法:
https://stackoverflow.com/questions/58253863
复制相似问题