MsBuild Target不起作用

时间:2018-05-31 13:28:35

标签: .net msbuild visual-studio-2017

我希望在从Visual Studio 2017在服务器上发布后,更改.csproj文件以执行我的目标。

<PropertyGroup>
    <PostBuildEvent>copy $(ProjectDir)\lib\Oracle.ManagedDataAccess.dll $(ProjectDir)\bin</PostBuildEvent>
  </PropertyGroup>
  <PropertyGroup>
    <PreBuildEvent>copy $(ProjectDir)\lib\Oracle.ManagedDataAccess.dll $(ProjectDir)\bin</PreBuildEvent>
  </PropertyGroup>  

  <ItemGroup>
    <OracleSourceFile Include="$(ProjectDir)\lib\Oracle.ManagedDataAccess.dll"/>
    <OracleDestinationFolder Include="$(ProjectDir)\bin"/>
  </ItemGroup>

  <Target Name="OracleTarget" AfterTargets="MSDeployPublish" >        
   <Copy
        SourceFiles="@(OracleSourceFile)"
        DestinationFolder="@(OracleDestinationFolder)">        
    </Copy>
  </Target>

但这不起作用。我没有在发布输出中看到我的目标已被执行。我做错了什么?

2 个答案:

答案 0 :(得分:1)

在阅读Microsoft best practices about deploying web application后,特别是this page(谈到部署额外文件),我最终修改了我的.pubxml,如下所示:

<Target Name="OracleCollectFiles">
    <ItemGroup>
      <OracleSourceFile Include="lib\**\*" />     
      <FilesForPackagingFromProject Include="%(OracleSourceFile.Identity)">
        <DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>

<PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
      OracleCollectFiles;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>

    <CopyAllFilesToSingleFolderForMsdeployDependsOn>
      OracleCollectFiles;
      $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
    </CopyAllFilesToSingleFolderForMsdeployDependsOn>
  </PropertyGroup>

</Project>

答案 1 :(得分:0)

  

MsBuild Target不起作用

您可以从File System发布项目。 File System不支持目标“MSDeployPublish”。

  

“我们目前不支持在发布后执行自定义目标   从VS获取文件系统协议。如果从命令发布   然而,目标将被执行。“

因此,我们可以使用MSBuild命令行通过指定目标/t:OracleTarget来执行此自定义目标:

msbuild "YourSolutionFile" /t:Build,OracleTarget /p:DeployOnBuild=true /p:PublishProfile=YourPublishFile.pubxml

除了,针对此问题的另一个解决方案,您可以使用目标CopyAllFilesToSingleFolderForPackage代替MSDeployPublish

  <Target Name="OracleTarget" AfterTargets="CopyAllFilesToSingleFolderForPackage" >        
   <Copy
        SourceFiles="@(OracleSourceFile)"
        DestinationFolder="@(OracleDestinationFolder)">        
    </Copy>
  </Target>

希望这有帮助。