代码之家  ›  专栏  ›  技术社区  ›  lockedscope L42

将参数/属性从发布配置文件传递到csproj文件

  •  0
  • lockedscope L42  · 技术社区  · 6 年前

    在中进行开发时,我排除了一些文件夹。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>
    

    因此,我需要确定何时在中使用“publish profile”运行构建。csproj文件并采取相应措施。

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

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

    更新:(解决方案) 检查我下面的答案,当使用CopyTopPublishDirectory时,它工作正常。

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

    2 回复  |  直到 6 年前
        1
  •  3
  •   Martin Ullrich    6 年前

    可以在 <PropertyGroup> 并在csproj的 <ItemGroup> s

    这是因为发布配置文件已导入到项目中,而msbuild会先计算所有静态属性组,然后再计算所有项组,这意味着即使是在文件末尾导入的文件也会从逻辑上影响其上方的项组。

        2
  •  0
  •   lockedscope L42    6 年前

    所以,我确定这些包含需要CopyTopPublishDirectory。所以下面的操作也很好。
    在里面csproj文件;

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

    在发布配置文件中;

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