VS2017在nuget包中将“Build Action”设置为“Content”

时间:2017-11-02 12:14:08

标签: .net visual-studio nuget visual-studio-2017 nuget-package

我使用以下命令行在connected-carousels中创建nuget个包。

gitlab

如果我将nuget pack -Prop Configuration=Release -OutputDirectory nuget %REPONAME%\%APPNAME%\%APPNAME%.csproj 声明为Build ActionContent声明为Copy To Output Directory,则不会在nuget包中应用它,或者在我安装它时。

我对这里的答案有点困惑: Set content files to "copy local : always" in a nuget package

我没有* .nuspec文件。它由上面的命令自动生成。

  1. 我在Always
  2. 的解决方案中声明了 Install.ps1 文件
  3. 我想自动将带有 Install.ps1 脚本的tools/*文件夹包含到nuget包中,并在安装时调用此脚本
  4. Install.ps1脚本

    tools

3 个答案:

答案 0 :(得分:1)

您需要将install.ps1文件添加到nuget包中。

使用您在原始帖子中提供的nuget pack命令后,它将在nuget文件夹中生成一个包。

然后请使用NuGet Package Explorer打开此软件包,并通过CONTENT添加工具文件夹 - >添加 - > NuGet Package Explorer菜单中的Tools文件夹。然后将install.ps1文件添加到tools文件夹中。

现在,当程序包安装到项目中时,它将调用install.ps1文件将文件的Copy To Output Directory属性设置为Copy Always。

答案 1 :(得分:0)

为了自动将文件/文件夹添加到nuget包中,我编写了一个名为NuGetLib的小工具。

全局变量在安装程序中自动设置。

在我的.gitlab-ci.yml中,只需要这4行来构建包含所有依赖项和tools文件夹的nuget包:

# create output directory
- mkdir nuget
# create nuget package
- nuget pack -Prop Configuration=Release -OutputDirectory nuget %REPONAME%\%APPNAME%\%APPNAME%.csproj
# Add tools folder
- nugetlib add -t nuget -f .\%REPONAME%\%APPNAME%\tools
# deploy package to local repo
- xcopy /s /y /i nuget %NUGET_PATH%

您可以在此处下载:https://github.com/dojo90/nugetLib/releases

答案 2 :(得分:0)

在OP中:

  

我没有* .nuspec文件。它是由上面的命令自动生成的。

那不应该阻止您使用* .nuspec文件。它的名称应与您的项目相同(例如My.Consoto.Library.csproj ==> My.Consoto.Library.nuspec)-您仍然可以使用与OP中所示相同的.csproj命令

然后,在* .nuspec中,您可以具有如下代码:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata minClientVersion="2.5">
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>Consoto LLC</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <copyright>$copyright$</copyright>    
    <projectUrl>https://dev.azure.com/Consoto/</projectUrl> 
    <iconUrl>http://www.consoto.com/images/favicon.ico</iconUrl> 
    <releaseNotes>My custom release notes</releaseNotes> 
    <language>en-US</language> 
    <tags>MyCustomTag1</tags>
    <dependencies>
      <dependency id="My.Other.Library" version="1.0.0" />
    </dependencies>
  </metadata>  
  <files>
        <file src="nuget_tools/install.ps1" target="tools/" />
   </files>
</package>

.nuspec中的令牌将接收.csproj的AssemblyInfo.cs的值。

我意识到上面的示例具有硬编码的依赖关系,如果没有该部分,我还没有尝试过。.因此,我将再次检查并更新答案,以查看更通用的* nuspec是否可以与在OP中演示的命令。