如何将'副本设置为输出目录'我的nuspec文件中的属性?

时间:2017-06-25 15:19:09

标签: visual-studio-2015 nuget nuspec

请考虑以下nuspec文件:

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

上面已经成功打包了以&#39; GR&#39;开头的文件类型文件。并将它们添加到我的新参考解决方案中。

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

2 个答案:

答案 0 :(得分:14)

  

如何将&#39;副本设置为输出目录&#39;我的nuspec文件中的属性?

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

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

  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>
    
  3. 注意:&#34; $(MSBuildThisFileDirectory)&#34;的路径应该是相对路径,如果你不熟悉它,你可以使用绝对路径。

    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>
      
    2. 打包此软件包,然后将其添加到其他项目上进行测试,它运行正常。

答案 1 :(得分:2)

接受的答案对于非内容文件很有用,因为安装后将不会链接到项目。

但是,我要求有一个设置xml文件,该文件将被添加到项目中,并且nuget包用户可以对其进行编辑,而dll包将从输出目录中加载已编辑的xml文件。

由于不会将内容文件复制到构建目录,因此我不得不使用.targets文件将内容文件复制到输出目录。

nuspec文件

<file src="TestDemo.targets" target="build"/>
<file src="Settings.xml" target="content/Configuration"/>

.targets文件(文件名必须与程序包ID相同)

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="AfterBuild">
    <Copy SourceFiles="$(ProjectDir)Configuration\Settings.xml" DestinationFolder="$(TargetDir)Configuration\" ContinueOnError="true" />
  </Target>
</Project>