How can I set the 'copy to output directory

2019-01-09 16:07发布

问题:

Please consider the following nuspec file:

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

The above has successfully packaged up the filetype files starting with 'GR' and has added them to my new, referencing, solution.

The problem is that I want these files to always be copied to the output directory. Can I do this via nuspec without having to manually amend the properties in my new solution?

回答1:

How can I set the 'copy to output directory' property in my nuspec file?

Martin pointed out the right direction, I have same request before and kjbartel`s answer is nice to me. I post the answer here with more detail for you question, hope this can give you some help.

To resolve this question, you can follow below steps:

  1. Add a xx.targets file in your project folder, make sure the name of the target file is the same name as the package id(TestDemo is my package ID, so the name of .targets is TestDemo.targets).

  2. Add below code in the targets file:

    <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>
    

Note: The path of "$(MSBuildThisFileDirectory)" should be relative path, if you are not familiar with it, you can use the absolute path.

  1. In the nuspec file, add required file to the Build directory along with the targets file.

      <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>
    
  2. Pack this package, then add it on other project to test, it work fine.