如何在我的nuspec文件中设置"复制到输出目录"属性?

7 nuget nuspec visual-studio-2015

请考虑以下nuspec文件:

<?xml version="1.0"?>
<package >
  [SOME METADATA]
  <files>
    <file src="bin\x64\$configuration$\GR*.filetype" target="content\" />
  </files>
</package>
Run Code Online (Sandbox Code Playgroud)

上面已经成功打包了以'GR'开头的文件类型文件,并将它们添加到我的新的引用解决方案中.

问题是我希望始终将这些文件复制到输出目录.我可以通过nuspec执行此操作,而无需在我的新解决方案中手动修改属性吗?

Leo*_*SFT 16

如何在我的nuspec文件中设置"复制到输出目录"属性?

马丁指出了正确的方向,我之前有同样的要求,kjbartel的回答对我很好.我在这里发布答案,更详细的问题,希望这可以给你一些帮助.

要解决此问题,您可以按照以下步骤操作:

  1. 在项目文件夹中添加一个xx.targets文件,确保目标文件的名称与包ID相同(TestDemo是我的包ID,因此.targets的名称是TestDemo.targets).

  2. 在目标文件中添加以下代码:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     <ItemGroup>
      <None Include="$(MSBuildThisFileDirectory)GRabc.txt">
         <Link>GRabc.txt</Link>
         <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      </None>
     </ItemGroup>
    </Project>
    
    Run Code Online (Sandbox Code Playgroud)

注意:"$(MSBuildThisFileDirectory)"的路径应该是相对路径,如果你不熟悉它,可以使用绝对路径.

  1. 在nuspec文件中,将所需文件与目标文件一起添加到Build目录.

      <files>
        <file src="bin\x64\Debug\GR*.txt" target="Build\" />
        <file src="TestDemo.targets" target="Build\" />
        <file src="bin\Debug\TestDemo.dll" target="lib\462" />
      </files>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 打包这个包,然后将其添加到其他项目进行测试,它工作正常.

  • 今天我使用了相同的方法,并且效果很好。但是我发现,包含的文件之后在VS的文件属性中显示为“请勿复制”,这非常令人误解。如果用户不知道幕后发生的事情(很可能他不知道!),他会感到非常困惑! (2认同)
  • 有谁知道是否可以在 .targets 文件中使用通配符? (2认同)