7

我很难通过使用Visual Studio 2012 UI的Webdeploy部署第三方非参考程序集。 我有一个名为'库'的文件夹,其中包含一些程序集。 通过我的* .csproj的文件,下面我可以设置生成操作为 'ThirdPartyAssemblies':MSBuild目标和Visual Studio 2012问题

<ItemGroup> 
    <AvailableItemName Include="ThirdPartyAssemblies"> 
    <Visible>false</Visible> 
    </AvailableItemName> 
</ItemGroup> 
<Target Name="AfterBuild"> 
    <Message Text="Build | Third party assemblies" Importance="high" /> 
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 

这个伟大的工程;当我构建时,程序集被复制到bin文件夹的根目录中:-) 现在我遇到了一个问题:我无法通过Webdeploy将这些文件发布到服务器。 我试过很多东西,它只是好像我找不到这个任务的合适的MSBuild目标...... 随着Visual Studio 2010中,我可以用这个:

<Target Name="MyTargetName"> 
    <Message Text="Deploy | Third party assemblies" Importance="high" /> 
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 
<PropertyGroup> 
    <OnAfterCopyAllFilesToSingleFolderForPackage> 
    MyTargetName 
    </OnAfterCopyAllFilesToSingleFolderForPackage> 
</PropertyGroup> 

的问题是; OnAfterCopyAllFilesToSingleFolderForPackage目标不被称为: -/

挖掘到C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets' file, I've also tried 'OnAfterCopyAllFilesToSingleFolderForMsdeploy后,但我只是不能得到它的工作。

任何人都可以告诉我可以使用什么目标将这些程序集复制到Package文件夹/ Webdeploy服务器?

为什么Visual Studio 2012不将完整的bin文件夹复制到Package文件夹?

回答

8

感谢阿列克谢我找到了解决我的问题,这是我使用的是什么,现在在我的.csproj文件,以支持复制为所在文件系统和Webdeploy第三方组件:

<ItemGroup> 
    <AvailableItemName Include="ThirdPartyAssemblies"> 
     <Visible>false</Visible> 
    </AvailableItemName> 
</ItemGroup> 
<Target Name="AfterBuild"> 
    <Message Text="Build | Copying third party assemblies to output folder ($(OutputPath))" Importance="high" /> 
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 
<Target Name="CopyBinFiles" AfterTargets="CopyAllFilesToSingleFolderForPackage" BeforeTargets="MSDeployPublish"> 
    <Message Text="Deploy | Copying third party assemblies to output folder ($(_PackageTempDir)\bin\)" Importance="high" /> 
    <Copy DestinationFolder="$(_PackageTempDir)\bin\" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 
2

你正在使用vs2012,这意味着你有闪亮的新的msbuild 4.0 =)。用新的AfterTargets属性钩住目标电话非常简单。您可以查看my answer on this question的使用示例。

+1

FYI VS2010还使用msbuild 4.0 –

+1

我知道;)。你根本不需要VS。 MSBuild .NET FW的一部分,所以你可以在没有工作室的情况下使用它。 除了vs2010没有真正使用msbuild.exe,但VS2012呢。但是这个东西很挑剔,与问题和答案无关。 –