我在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)。
谢谢!
答案 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">