【问题标题】:Pass parameter/property from publish profile to csproj file将参数/属性从发布配置文件传递到 csproj 文件
【发布时间】:2018-03-01 18:03:01
【问题描述】:

我在 .csproj 文件中构建开发时排除了一些文件夹。

<ItemGroup>
<Content Remove="Production\**" />
<Compile Remove="Production\**" />
</ItemGroup>

我想将这些文件夹重新包含在“发布配置文件”中,但它不起作用。

<ItemGroup>
<Content Include="Production\**" />
<Compile Include="Production\**" />
</ItemGroup>

那么,我如何将“发布配置文件”中的参数传递给 build(.csproj) 并防止排除这些文件夹或将它们包含回来。

<ItemGroup Condition="'$(SOMEPARAM)'!='Production'">
<Content Remove="Production\**" />
<Compile Remove="Production\**" />
</ItemGroup>

因此,我需要确定何时使用 .csproj 文件中的“发布配置文件”运行构建并采取相应措施。

我知道可以使用命令行参数,但我想使用 Visual Studio,而不是命令行。

dotnet build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile;SOMEPARAM=Production

更新:(解决方案) 在下面查看我的答案,使用 CopyToPublishDirectory 时效果很好。

更新:(另一种解决方案) 或者,当使用相同名称指定目标时,发布文件中的目标将覆盖项目文件中的目标,因此我们可以在项目和发布文件中分别定义要包含/排除的内容。

【问题讨论】:

  • 发布配置文件和 .csproj 文件是两个独立的文件。如果您通过从 .csproj 中删除某些内容来从项目中排除某些内容,那么发布配置文件将无法看到它。
  • 为什么在构建时需要排除文件夹?如果您只想拥有不同的构建输出内容和发布文件夹,您可以使用CopyToOutputDirectoryCopyToPublishDirectory 参数
  • 设置,它们不只是内容,需要编译,不排除会导致编译冲突。

标签: asp.net-core msbuild


【解决方案1】:

您可以在发布配置文件的 &lt;PropertyGroup&gt; 内定义任何属性,并在 csproj 的 &lt;ItemGroup&gt;s 中的条件中使用它。

这是因为发布配置文件被导入到项目中,并且 msbuild 在所有项目组之前评估所有静态属性组,这意味着即使是在其末尾导入的文件也可以在逻辑上影响其上方的项目组。

【讨论】:

    【解决方案2】:

    所以,我确定这些包括需要 CopyToPublishDirectory。所以以下工作也很好。
    在 .csproj 文件中;

    <ItemGroup>
    <Content Remove="Production\**" />
    <Compile Remove="Production\**" />
    </ItemGroup>
    

    在发布配置文件中;

    <ItemGroup>
    <Content Include="Production\**" CopyToPublishDirectory="PreserveNewest" />
    <Compile Include="Production\**" CopyToPublishDirectory="PreserveNewest" />
    </ItemGroup>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-22
      • 2013-09-20
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多