在VS2010中单击发布后,将DLL文件复制到bin目录

时间:2011-03-13 12:19:54

标签: visual-studio-2010 msbuild publish

我在VS2010中有一个Web应用程序,它在VS2010中发布后需要将许多DLL复制到bin目录中。

我已经尝试将以下内容放入我的.csproj文件(位于Web应用程序的根文件夹中)但它似乎不起作用:

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

对于奖励积分,我有另一组DLL被复制以便在发布后复制,但我想在进行调试发布(对于Win32)时使用一个集合,而在执行发布发布时使用不同的集合(x86)。

谢谢!

3 个答案:

答案 0 :(得分:5)

好的,我已经成功完成了这项工作。感谢上面提供的答案,我已经能够在.csproj文件中添加一些MS Build命令,以根据当前的构建配置将各种文件夹中的相应DLL复制到bin文件夹中。但是,由于这些是非托管DLL(即不是.NET),我无法创建对它们的正常引用,并且在发布期间无法复制它们。我通过动态地将文件作为“内容”添加到项目中来解决这个问题。

解决方案分为三部分。首先,为.csproj文件顶部附近的文件创建一个项目组(我试图在这里使用通用文件名使其更清晰),条件基于当前的构建配置:

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <_UnmanagedDLLs Include="Win32DLLs\*.dll" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Release'">
  <_UnmanagedDLLs Include="x64DLLs\*.dll" />
</ItemGroup>

然后添加另一个项目组以在构建中包含这些DLL(作为内容,而不是引用):

<ItemGroup>
  <Content Include="@(_UnmanagedDLLs->'bin\%(Filename)%(Extension)')" />
</ItemGroup>

最后,在.csproj文件的底部,我在AfterBuild目标上执行复制:

<Target Name="AfterBuild">
  <Copy SourceFiles="@(_UnmanagedDLLs)" DestinationFiles="@(_UnmanagedDLLs->'bin\%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
</Target>

这意味着我可以为我的Windows 32分段框执行调试发布,并为我的x64生产框执行发布发布,同时将我的bin文件夹保留在SVN之外。

答案 1 :(得分:1)

一旦您完成了复制工作,就可以使用以下条件轻松调试/发布调试集:

<ItemGroup Condition="'$(Configuration)' == 'Release'">
  <_CircularDependencies Include="DLLs\Circular\Dependencies\*.dll" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <_CircularDependencies Include="DebugDLLs\Circular\Dependencies\*.dll" />
  <_CircularDependencies Include="DebugDLLs\Circular\Dependencies\*.pdb" />
</ItemGroup>

答案 2 :(得分:0)

如果您希望您的副本在发布后发生,而不是在构建之后,您需要更改目标:

<Target Name="AfterBuild">

<Target Name="AfterPublish">