【问题标题】:Create multi-target nuget package from several csproj contained in different folders from nuspec file从 nuspec 文件的不同文件夹中包含的多个 csproj 创建多目标 nuget 包
【发布时间】:2019-09-18 08:32:02
【问题描述】:

我正在尝试为存在 2 个版本的库创建一个 nuget 包,每个版本都针对两个不同的 .NET 版本。

这是我的文件夹结构:

如您所见,我的 nuspec 文件是我的 csproj 上方的一个目录(位于 /net452 和 /netcoreapp2.0 文件夹中)。

我正在使用以下命令行来构建我的 nuget 包:

nuget pack .\my.nuspec -properties Configuration=Release -Build

问题是因为csproj文件和nuspec文件不在同一个文件夹,所以无法构建。

请注意,当两个项目都事先手动构建时,打包工作正常。

我对这个过程很陌生,我不确定在那种情况下我应该做什么,有没有一种简单的方法可以从 nuspec 中引用 2 csproj 或者 - 假设我想要为了保持这个文件夹结构 - 我需要先创建一个脚本来构建项目,然后调用 nuget pack

编辑:为了澄清我的问题,我确实有两个不同的 csproj 文件,分别包含在 /net452 和 /netcoreapp2.0 中,它们在各自的目录中编译源代码以生成两个不同的dll。然后在我的 nuspec 文件中引用这两个 dll,以便使用以下语法在 net452 或 netcoreapp2.0 中提供我的包:

  <files>
    <file src="lib\**" target="lib" />
  </files>

注意:在我手动编译我的两个项目后,目录如下所示(注意包含 net452 和 netcoreapp2.0 文件夹的 lib 文件夹以及我的 dll 的适当版本)。

【问题讨论】:

    标签: c# .net msbuild nuget packaging


    【解决方案1】:

    不确定是否理解正确 - 您有一个库并希望以两个版本(net452 和 netcore)构建它。

    您是否尝试将以下项目添加到 *.csproj?

    <PropertyGroup>
        <TargetFrameworks>net45;netcoreapp2.0</TargetFrameworks>
    </PropertyGroup>
    

    然后,您可以在项目中拥有来自 build 的两个输出

    【讨论】:

    • 我没有一个库(dll),我有两个(所以2个csproj,因为它们编译的代码不同),它们分别针对net452和netcoreapp2.0。不过,我确实想为它们制作一个单独的 nuget 包。我已经编辑了问题以进行澄清。
    • 那么你为什么不想将它们合并到一个单独的 csproj 中呢?您仍然可以在其中有两个文件夹,并使用条件包含不同框架的 .cs 文件。 (您可以在代码中使用#if NET45 的另一种形式)
    • @MartinUllrich 是对的。 .net 核心项目的新 .csproj 格式可以接受标准的 MSBuild 语法。因此,您可以将 csproj 文件组合在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多