Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSBuild目标和Visual Studio 2012问题_Msbuild_Visual Studio 2012_Msbuild Task_Webdeploy_Msbuild Target - Fatal编程技术网

MSBuild目标和Visual Studio 2012问题

MSBuild目标和Visual Studio 2012问题,msbuild,visual-studio-2012,msbuild-task,webdeploy,msbuild-target,Msbuild,Visual Studio 2012,Msbuild Task,Webdeploy,Msbuild Target,我很难使用Visual Studio 2012 UI通过Webdeploy部署第三方非引用程序集。 我有一个名为“libraries”的文件夹,其中包含一些程序集。 通过我的*.csproj文件中的以下内容,我可以将构建操作设置为“第三方组件”: 假的 这很有效;生成时,程序集被复制到bin文件夹的根目录:-) 现在我有一个问题:我无法通过Webdeploy将这些文件发布到服务器。 我尝试了很多方法,但似乎找不到适合此任务的MSBuild目标。。。 使用Visual Studio 2010,

我很难使用Visual Studio 2012 UI通过Webdeploy部署第三方非引用程序集。 我有一个名为“libraries”的文件夹,其中包含一些程序集。 通过我的*.csproj文件中的以下内容,我可以将构建操作设置为“第三方组件”:


假的
这很有效;生成时,程序集被复制到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>

MyTargetName
问题是,;不再调用AfterCopyAllFilesToSingleFolderForPackage的
目标:-/

在深入研究了
C:\ProgramFiles(x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets”文件之后,我还尝试了“将所有文件复制到SingleFoldPerformsDeploy
”,但我就是无法让它工作

有谁能告诉我可以使用哪个目标将这些程序集复制到Webdeploy的包文件夹/服务器


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

您正在使用vs2012,这意味着您有了全新的msbuild 4.0=)。使用新的AfterTargets属性钩住目标调用要简单得多。例如,您可以检查使用情况。

多亏了Alexey,我找到了解决问题的方法,这就是我现在在.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>

假的

FYI Vs2010还使用了msbuild 4.0I know;)。你根本不需要VS。MSBuild是.NET FW的一部分,因此您可以在不使用studio的情况下使用它。除了vs2010没有真正使用msbuild.exe,但VS2012确实使用。但这些都是吹毛求疵,与问答无关。
<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>