如何指定 Nuget 架构?

Ev.*_*Ev. 5 xml visual-studio nuget

我在用于创建 nuget 包的同一个解决方案中有两个项目。当我获取这些包中的每一个并将其解压缩以找到生成的 nuspec 时,我发现它们每个都针对不同的 xml 模式。

套餐A:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
Run Code Online (Sandbox Code Playgroud)

套餐B:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为我的构建服务器想要使用 nuget 1.7 版推送它们(我无法升级它),所以只会推送包 A。

如何强制包 B 以与 A 相同的模式为目标?

附加信息:包 A 目标 .Net 4.0 包 B 目标 .Net 3.5 我正在本地打包 nuget 2.8,可以确认相同的命令生成不同的架构版本:

nuget pack xxx.csproj -IncludeReferencedProjects -OutputDirectory c:\nuget\MyPackageLibrary -verbosity detailed
Run Code Online (Sandbox Code Playgroud)

(我有一个相应的 xxx.nuspec 文件用于元数据)

我试过在 .nuspec 文件中不指定架构

<?xml version="1.0"?>
<package>
<metadata>
Run Code Online (Sandbox Code Playgroud)

我试过指定:

<?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata>
Run Code Online (Sandbox Code Playgroud)

但它对我解压缩打包工件时找到的 .nuspec 没有影响。

Mat*_*ard 5

如果您无法升级 NuGet 的构建服务器版本,那么我将只使用相同的版本,以便在 NuGet 包中生成相同的架构版本。

查看 NuGet 源代码,所使用的架构版本取决于 NuGet 包使用的功能集。例如,如果您的 NuGet 包使用 XDT 转换,那么它将使用架构版本 4 命名空间:

http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd
Run Code Online (Sandbox Code Playgroud)

NuGet 1.7 中不包含此版本 4 命名空间。XDT 转换包含在 NuGet 2.6 中。

在 NuGet 2.8.7 中,有两个位置可以确定架构版本。

  • 包生成器
  • 清单架构实用程序

    • 模式版本 4:定义了目标框架的依赖项内容和工具
    • 架构版本 4:已定义目标框架的依赖项。
    • 模式版本 5:定义了目标框架的程序集引用
    • 模式版本 6:XDT 转换