首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有附加程序集的.net核心msbuild

带有附加程序集的.net核心msbuild
EN

Stack Overflow用户
提问于 2017-08-16 05:13:41
回答 2查看 625关注 0票数 1

这个样本展示了一个.NET核心项目,它可以使用dotnet pack打包成nuget包,并且在另一个项目中恢复时,它集成在msbuild管道中。这个示例的一个伟大之处在于它创建了一个nuget包,它与linux、mac和Windows上的msbuild集成在一起。但是,自定义构建代码不依赖于任何其他程序集。

如何调整此示例以使用使用依赖项的代码?

以下是我失败的尝试:

尝试1

我向Newtonsoft.Json添加了一个包引用,并更改了代码以执行一些JSON序列化。但是,在使用build的项目中,当我执行dotnet publish时,会得到以下错误:

代码语言:javascript
复制
error MSB4018: The "Zip" task failed unexpectedly. [C:\git\MSBuild-Features-With-Nate-McMaster\Video-2\1-NuGet\Web.csproj]
error MSB4018: System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. The system cannot find the file specified. [C:\git\MSBuild-Features-With-Nate-McMaster\Video-2\1-NuGet\Web.csproj]

此外,如果我的项目没有对JSON.NET的依赖,添加build将不必要地添加它。

尝试2

我使用nuget.exe spec创建了一个.nuspec文件。在文件的末尾,我添加了:

代码语言:javascript
复制
<files>
  <file src="bin\Release\**" target="build" />
  <file src="build\**" target="build" />
</files>

但是,"dotnet“和"msbuild /t:pack”都忽略该文件,而nuget.exe pack在错误Unable to find 'bin\Release\0-WriteATask\bin\Release\'. Make sure the project has been built.中失败。

如果我尝试nuget.exe pack Zipper.nuspecmsbuild /t:pack /p:NuspecFiles=Zipper.nuspec,它们在消息Value cannot be null or an empty string.上都会失败。

尝试3

我编辑了nuspec以删除通常从项目中计算出来的所有占位符(任何以$开头和结尾的字符串)。然后,执行nuget.exe pack Zipper.nuspec创建了一个nupkg文件,net46文件夹包含Newtsonsoft.Json.dll,但netstandard1.3文件夹没有。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-18 07:30:23

MSBuild加载任务程序集的方式可能会使加载您可能依赖的其他程序集变得棘手。

通常,解决这一问题的最简单方法是在NuGet包中提供依赖项的副本。但是,包中任务程序集文件旁边的依赖项。可能还有一些额外的复杂问题需要您使用AssemblyLoadContext或AppDomain.AssemblyResolve事件。

通过强制MSBuild将程序集复制到本地构建输出中,然后将它们复制到包中,可以在不使用nuspec文件的情况下完成此操作。设置CopyLocalLockFileAssemblies=true,并将项添加到_PackageFiles

下面是一个如何做到这一点的示例:https://github.com/madskristensen/BundlerMinifier/blob/3333b5c38289a247391966443370ee6f4a29bf26/src/BundlerMinifier/BundlerMinifier.csproj#L35-L47

希望将来能够解决这个问题,https://github.com/Microsoft/msbuild/issues/1312,任务程序集解析将使用NuGet缓存。

票数 3
EN

Stack Overflow用户

发布于 2017-08-22 19:59:55

尝试一下9.0.1版本的Newtonsoft.Json,它为我工作,所有这些dll加载问题都消失了,它仍然以.NET标准为目标。虽然我复制了任务dll旁边的所有依赖项,但是对于10.x版本甚至没有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45705536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档