具有用户特定变量的共享发布配置文件

Shared Publish Profiles with User Specific variables

我们有一个复杂的 visual studio 发布配置文件供开发人员部署文件。我希望开发人员都使用相同的发布配置文件,同时为每个未签入源代码管理的用户配置一些变量。这可能吗?如果是那么怎么办?

<?xml version="1.0" encoding="utf-8"?>
  <!--
  This file is used by the publish/package process of your Web project. You can customize the behavior of this process
  by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121. 
  -->
  <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
      <WebPublishMethod>FileSystem</WebPublishMethod>
      <PublishProvider>FileSystem</PublishProvider>
      <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
      <LastUsedPlatform>Any CPU</LastUsedPlatform>
      <SiteUrlToLaunchAfterPublish />
      <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
      <ExcludeApp_Data>False</ExcludeApp_Data>
      <DeleteExistingFiles>False</DeleteExistingFiles>
      <PipelineDependsOn>
        CopyAssets;
        $(PipelineDependsOn);
      </PipelineDependsOn>
      <publishUrl>C:\inetpub\wwwroot\local.MyApp\Website</publishUrl>
    </PropertyGroup>
    <Target Name="CopyAssets">
      <Message Text="Inside of CopyAssets" Importance="high"/>
      <Exec Command="%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe -File &quot;$(SolutionDir)Foundation\Scripts\Powershell\CopyAssets.ps1&quot; $(SolutionDir) $(publishUrl)"/>
    </Target>
  </Project>

这是最简单的形式。在此示例中,我希望开发人员在每个用户的基础上配置发布 URL,如果可能的话最好在 .user 文件中配置,或者从我们可以传递到此发布配置文件的某个地方获取变量或参数。

我通过创建 .wpp.targets 文件解决了这个问题。我在我正在发布的项目中创建了一个。这允许我为所有发布配置文件定义我是 运行 运行 的 Powershell。

这使我能够允许开发人员定义他们自己的发布配置文件,并且仍然 运行 脚本允许发布 URL 值对于每个开发人员都是单独的。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PipelineDependsOn>
      CopyAssets;
      $(PipelineDependsOn);
    </PipelineDependsOn>
  </PropertyGroup>

  <Target Name="CopyAssets">
    <Message Text="Inside of CopyAssets" Importance="high"/>
    <Exec Command="%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe -File &quot;$(SolutionDir)Foundation\Scripts\Powershell\CopyAssets.ps1&quot; $(SolutionDir) $(publishUrl)"/>
  </Target>
</Project>

我从我的发布配置文件中删除了 PipelineDepndsOn 部分,并按照我上面定义的那样在目标文件中执行了它。