【发布时间】:2020-03-20 10:36:05
【问题描述】:
我有一个包含多个项目的 Visual Studio 解决方案。对于我想要支持的每个版本的 .NET Framework (+ .NET Core),都有一个 csproj,并且我想保持这种状态。它们都各自生成一个 DLL。所有 DLL 的名称都相同,但略有不同。
我最近开始使用 nuspec 文件和命令 nuget pack 从这些 DLL 中生成 NuGet 包。到目前为止,我已经为每个 DLL 生成了一个 NuGet 包。
是否可以生成一个包含所有 DLL 的单个 NuGet 包,并且当用户安装该包时,安装正确的 DLL?
我在我的 nuspec 文件中尝试了以下内容:
<?xml version="1.0" encoding="utf-8"?>
<package >
<metadata>
...
<dependencies>
<group targetFramework=".NETCoreApp3.1" />
<group targetFramework=".NETFramework4.0" />
</dependencies>
</metadata>
<files>
<file src="bin\Company.Product.dll" target="lib\net40" />
<file src="..\CompanyProductCore\bin\Company.Product.dll" target="lib\netcoreapp3.1" />
</files>
</package>
当我查看生成的 NuGet 包时,lib 文件夹中有两个预期的子文件夹,它们每个都包含一个看起来正确的 DLL。
但是,当我测试包并尝试将其安装到 .NET Core 应用项目的另一个 Visual Studio 解决方案中时,我收到警告:
Package X was restored using '.NETFramework,Version=v4.6.1...4.6.2...4.7...4.7.1...4.7.2...4.8 instead of the project target framework '.NetCoreApp,Version=3.1'. This package may not be fully compatible with your project.
这是我单独包装时没有出现的东西。所以它似乎没有检测到有一个特定于 .NET Core 的 DLL。
我想做的事是否可行,如果可以,怎么做?
【问题讨论】:
-
啊,为什么你想出你自己的目标框架的名字并且仍然期望它能够工作?尝试使用文档中给出的字符串。
-
为什么不用
dotnet pack,让命令自动生成正确的nuspec? -
TomTom 我不知道我应该用不同的方式来写它,我一定是误解了我在某处看到的一些例子。正如weichchm给出的答案中提到的那样,我试图改变它,但它没有帮助。
-
zivkan dotnet pack 似乎确实是 .NET Core 项目的不错选择,但不一定是 .NET Framework 项目,如果我理解正确的话。但我会尝试看看我是否可以让它工作。
-
zivkan 我试过了,我的 .NET Core 项目成功运行了命令,但是我的 .NET Framework 4.0 项目给我的错误消息是项目中不存在目标“包”,并且我找不到这样的目标标签应该包含什么。
标签: c# nuget nuget-package nuget-spec