我认为这更多是与msbuild有关的问题。 有一个.net核心应用程序,我需要有条件地发布文件,并且基于Visual Studio 2019中选择的生成配置,应在发布到目标之前重命名该文件。
因此,我正在考虑修改csproj文件(除了msbuild文件本身之外,什么都没有) 我在复制任务上看不到条件选项 https://docs.microsoft.com/en-us/visualstudio/msbuild/copy-task?view=vs-2019
我追求的目标是,如果我有3个不同的文件
tester-notes.dev.json
tester-notes.debug.json
tester-notes.prod.json
如果选择prod作为构建配置,我希望发布的文件为tester-notes.prod.json,但重命名为tester-notes.json
答案 0 :(得分:0)
假设开发时在解决方案资源管理器中有三个文件(build action = None):
如果您使用的是FileSystem
发布模式,则可以使用与此脚本类似的方法来重命名并复制到发布文件夹:
<ItemGroup Condition="$(Configuration)=='Dev'">
<FileToRename Include="$(ProjectDir)\tester-notes.dev.json" />
</ItemGroup>
<ItemGroup Condition="$(Configuration)=='Debug'">
<FileToRename Include="$(ProjectDir)\tester-notes.debug.json" />
</ItemGroup>
<ItemGroup Condition="$(Configuration)=='Prof'">
<FileToRename Include="$(ProjectDir)\tester-notes.prof.json" />
</ItemGroup>
<Target Name="DoSthAfterPublish1" AfterTargets="Publish" Condition="$(Configuration)=='Dev'">
<Copy SourceFiles="@(FileToRename)" DestinationFiles="@(FileToRename->Replace('.dev.json','.json'))"/>
<Move SourceFiles="$(ProjectDir)\tester-notes.json" DestinationFolder="$(PublishDir)" OverwriteReadOnlyFiles="true"/>
</Target>
<Target Name="DoSthAfterPublish2" AfterTargets="Publish" Condition="$(Configuration)=='Debug'">
<Copy SourceFiles="@(FileToRename)" DestinationFiles="@(FileToRename->Replace('.debug.json','.json'))"/>
<Move SourceFiles="$(ProjectDir)\tester-notes.json" DestinationFolder="$(PublishDir)" OverwriteReadOnlyFiles="true"/>
</Target>
<Target Name="DoSthAfterPublish3" AfterTargets="Publish" Condition="$(Configuration)=='Prof'">
<Copy SourceFiles="@(FileToRename)" DestinationFiles="@(FileToRename->Replace('.prof.json','.json'))"/>
<Move SourceFiles="$(ProjectDir)\tester-notes.json" DestinationFolder="$(PublishDir)" OverwriteReadOnlyFiles="true"/>
</Target>
如果您可以将tester-notes.debug.json
重置为tester-notes.Debug.json
,那么我们可以使用DestinationFiles="@(FileToRename->Replace('.$(Configuration).json','.json'))"
将这三个目标组合为一个。希望它能有所帮助:)
此外:
根据Intellisense,我们可以找到Copy task
支持Condition
: