vs 多目标框架输出不同结果的文件名

描述如下
https://stackoverflow.com/questions/65599082/change-multi-target-project-output-path-and-file-name

希望同一个项目在编译后得到不同的文件名
D:\bin\app-net48.exe
D:\bin\app-net50.exe
使用stackoverflow的答案,vs将提示我找不到目标框架
貌似$(TargetFramework)这个变量就不存在

<PropertyGroup Condition="'$(TargetFramework)'=='net48'">
    <AssemblyName>app-net48</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)'=='net5.0-windows'">
    <AssemblyName>app-net50</AssemblyName>
</PropertyGroup>

最后我用生成后事件,直接改名了

if "$(TargetFramework)" == "net6-windows" copy "$(TargetPath)" "$(TargetDir)$(MSBuildProjectName)CORE.exe"
if "$(TargetFramework)" == "net48" copy "$(TargetPath)" "$(TargetDir)$(MSBuildProjectName)FX.exe"

del /f /s /q "$(TargetPath)"

在exe项目中,$(TargetPath)在fx中返回的是 项目名.exe
在core中返回的是 项目名.dll ,exe是启动器的名字
这里我统一需要exe的名字
$(TargetPath) 替换为 $(TargetDir)$(TargetName).exe

if "$(TargetFramework)" == "net6-windows" copy "$(TargetDir)$(TargetName).exe" "$(TargetDir)$(MSBuildProjectName)CORE.exe"
if "$(TargetFramework)" == "net48" copy "$(TargetDir)$(TargetName).exe" "$(TargetDir)$(MSBuildProjectName)FX.exe"

del /f /s /q "$(TargetDir)$(TargetName).exe"

处于个人需要,在删除之前,我还需要它执行一次

rem 运行一次设置环境变量
start /wait "" "$(TargetDir)$(TargetName).exe" "--onlySetEnv"
posted @ 2023-08-17 13:50  trykle  阅读(26)  评论(0编辑  收藏  举报