【发布时间】: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 中删除某些内容来从项目中排除某些内容,那么发布配置文件将无法看到它。
-
为什么在构建时需要排除文件夹?如果您只想拥有不同的构建输出内容和发布文件夹,您可以使用
CopyToOutputDirectory和CopyToPublishDirectory参数 -
设置,它们不只是内容,需要编译,不排除会导致编译冲突。
标签: asp.net-core msbuild