【发布时间】:2019-03-02 15:17:48
【问题描述】:
我正在创建一个 NuGet 包,其中包含一个 .Net 标准 DLL 和一个配置文件。该项目应该同时支持 .Net Core 和 .Net Framework。
简而言之,使用 dotnet pack 和 .nuspec 文件打包此 DLL 和配置文件,会创建一个与 .Net Core 不“完全兼容”的包:
更多细节在这里:
在项目 .csproj 我正在添加一个 .nuspec 文件引用:
<NuspecFile>.\MyProject.nuspec</NuspecFile>
我旁边有以下 .nuspec 文件:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MyProject</id>
<version>1.0.0</version>
<authors> </authors>
<description>some text</description>
</metadata>
<files>
<file src="MyProject.targets" target="Build\"/>
<file src="NLog.config" target="Build\" />
<file src="bin/Release/MyProject.dll" target="lib\dotnet"/>
</files>
<dependencies>
<dependency id="newtonsoft.json" version="11.0.2" />
<dependency id="nlog" version="4.5.10" />
</dependencies>
</package>
然后在这两个旁边,我有一个 .targets 文件:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="NLog.config">
<Link>NLog.config</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
我正在使用 VSTS 中的dotnet pack 命令将其打包到一个 nuget 包中,并为其提供我的 .csproj 文件的路径。
我正在尝试执行这种复杂的方法,因为我希望将 NLog.config 自动包含到安装此软件包的项目中,并将此配置文件属性 复制到输出目录 设置为 始终复制,取自here 和here 的方法,但目前还不行。
作为旁注,我在尝试 dotnet pack 并为其提供 .nuspec 文件的路径之前说过相同的行为,但当我将路径更改为 .csproj.
有谁知道为什么在使用 .nuspec 文件打包此包时,在使用此包的 .Net Core 客户端中会出现此警告?
非常感谢您的耐心和帮助!
【问题讨论】:
-
东西应该放在 \lib\NetStandard16(或类似的)文件夹中。正如您的 nuspec 中定义的那样,您只是在为 netcore 放置东西。 Visual Studio 后退并给你这个警告作为权宜之计,直到每个人都更新
-
1) 出于好奇,您为什么在 csproj 文件中使用 nuspec 文件而不是 NuGet metadata properties? 2) NuGet 不会为 .NET Core 自动安装文件(据我所知)。我的理解是 NuGet 已经放弃了对 .NET 核心的支持
-
@willwolfram18 我使用了 NuGet 元数据属性,但此警告消失了,一切正常,并且 NLog.config 文件已正确安装在客户端项目中,唯一的例外是未设置到
Copy always到输出目录。 -
@pinkfloydx33 因为我阅读了this topic here,所以我尝试遵循它建议的相同结构,但没有结果。我只为 .Net Standard 放置东西,以便它们可以安装在 .Net Core 和 .Net Framework 客户端上。
标签: c# .net .net-core nuget package