2011-02-11 57 views
1

要复制在不同的位置中的文件后构建公布后,我试过如下:复制在不同的位置中的文件生成

编辑的csproj文件,并添加该代码,复制的DLL到相对斌路径。

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

这工作绝对好。我只是想知道这是否可以使用事后构建事件 这样的事情..(这不工作)。

if $(ConfigurationName) == Release xcopy /y "$(ProjectDir)$(OutDir)$(TargetFileName)" "$(SolutionDir)$(OutDir)" 

第一种方法是“在VS2010中oneclick发布”的唯一方法吗?值得关注的是,在VS2010中,csproj文件中的更改将不会显示在任何地方。

回答

7

是的,你可以做到这一点,而无需使用AfterBuild目标和Copy task黑客:

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

说退出代码255。bin文件夹是其他proj,其所有内容应该是该项目的一部分,同时进行构建。 – genericuser 2011-02-11 16:18:22

0

这也将工作,是在不同的Visual Studio版本的维护。

<Target Name="CustomFolderDeploy" AfterTargets="CopyAllFilesToSingleFolderForPackage" BeforeTargets="MSDeployPublish"> 
    <PropertyGroup> 
     <CustomFolder>$([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..\Lib\CustomFolder'))</CustomFolder> 
    </PropertyGroup> 
    <CreateItem Include="$(CustomFolder)\*.*"> 
     <Output TaskParameter="Include" ItemName="CustomFiles" /> 
    </CreateItem> 
    <Copy SourceFiles="@(CustomFiles)" DestinationFolder="$(MSBuildProjectDirectory)\obj\$(Configuration)\Package\PackageTmp\bin" SkipUnchangedFiles="True" ContinueOnError="False" /> 
    </Target> 
相关问题