打包以发布模式编译的NuGet项目?


109

有什么方法可以使用在发布模式下编译的代码制作NuGet软件包?还是出于某些原因,我只应发布(以本地方式提供)在调试模式下编译的程序包?

每次我nuget pack从下面有nuspec文件的项目目录中调用我仅在发布模式下编译的代码时,都会抱怨在调试文件夹("\bin\Debug\SomeProject.dll")中找不到DLL 。如果我在调试模式下进行编译,则这些文件在那里,它将按需打包。

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <authors>$author$</authors>
        <owners>$author$</owners>
        <iconUrl>http://somewhere/project.png</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>$description$</description>
    </metadata>
</package>

Answers:


207

你可以解决这个问题是这样的:NuGet.exe pack Foo.csproj -Prop Configuration=Release参考)。


10
对于任何想要从链接中获取简短故事的人(虽然读得不错),从v1.3到v1.4都有一个变化,从默认的Release变为从项目设置中拉出的默认设置,只能在直接将项目文件(没有VS GUI选项)。为了避免对以后的所有nuget pack调用进行命令行属性调整,请在您喜欢的文本编辑器中编辑项目文件XML。
2011年

4
有没有一种方法可以将发布版本和调试版本打包到一个软件包中,然后让我的项目根据我是否在调试与发布解决方案配置中自动使用“调试一个”与“发布一个”?
JD

2
如果只想为软件包调试符号,则可以将PDB文件包含在* .nuspec中(例如<file src="bin\Release\*.pdb" target="lib\net40\" />),也可以在DLL软件包旁边发布符号软件包。
2011年

1
@ Giorgi链接已过期
L

1
@JD我也想打包Debug和Release,我发现这一点:stackoverflow.com/questions/37673692/...
彼得宇

16

如果您正在使用构建后事件,并且想要使用Debug或Release配置来创建程序包,则可以按照以下方式设置构建后事件命令行:

"<path to nuget tools>\NuGet.exe" pack "$(ProjectPath)" -Prop Configuration=$(ConfigurationName)

10

要让NuGet在运行时自动使用发布模式,请执行nuget pack以下操作:

  1. .csproj在文本编辑器中打开文件。
  2. 找到以下行:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. 在这一行中,替换DebugRelease
  4. 保存更改。

0

答案很好,但是对于.NET Standard项目,我对此有很多问题。我有一个仅会发布Release二进制文件的项目,但它没有遵守我的默认生成输出路径。

我将此添加到CSProj中,然后使我能够在此处使用接受的答案。

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.