在构建之后复制不同位置的文件

gen*_*ser 1 msbuild copy visual-studio-2010

要在发布构建后复制不同位置的文件,我尝试了以下操作:

编辑csproj文件并添加此代码,将dll复制到相对路径的bin.

<PropertyGroup>  
<CopyAllFilesToSingleFolderForPackageDependsOn>  
    CustomCollectFiles; 
    $(CopyAllFilesToSingleFolderForPackageDependsOn);  
    </CopyAllFilesToSingleFolderForPackageDependsOn>  
</PropertyGroup> 
<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\*project*\**\*.dll" />
    <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)

这绝对没问题.我只是想知道是否可以使用像这样的post build事件来完成..(这不起作用).

if $(ConfigurationName) == Release xcopy /y "$(ProjectDir)$(OutDir)$(TargetFileName)" "$(SolutionDir)$(OutDir)" 
Run Code Online (Sandbox Code Playgroud)

第一种方式是在VS2010中单击发布的"唯一方法"吗?值得关注的是,在VS2010中,csproj文件中的更改不会显示在任何地方.

Ser*_*kov 7

是的,您可以在不使用AfterBuild目标和复制任务进行黑客攻击的情况下执行此操作:

  <Target Name="AfterBuild">
    <ItemGroup>
      <_CustomFiles Include="..\**\*.dll" />
    </ItemGroup>
      <Copy
            SourceFiles="@(_CustomFiles)"
            DestinationFiles="@(_CustomFiles->'bin\%(Filename)%(Extension)')" 
            SkipUnchangedFiles="true" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望将其与WebDeploy一起使用,则仍需要"Hacking"或CopyAllFilesToSingleFolderForPackageDependsOn.我最终使用AfterBuild目标进行Debug配置,并使用CopyAllFilesToSingleFolderForPackageDependsOn进行Nightly配置,该配置会自动部署. (3认同)