VS2019 16.6.2中TargetFrameworks配置无效问题咨询
解决多目标编译(net35;net40)未生成对应框架子文件夹的问题
你遇到的问题核心是旧的非SDK项目配置残留,干扰了.NET SDK项目默认的多目标输出逻辑。当你把传统.csproj转换为SDK风格后,需要清理掉几个关键的旧配置:
移除硬编码的
<OutputPath>或<OutDir>属性
旧项目通常会直接指定固定输出路径(比如<OutputPath>bin\Debug\</OutputPath>),但SDK风格项目在多目标编译时,默认会自动在输出根目录下为每个目标框架创建独立子文件夹(如bin\Debug\net35、bin\Debug\net40)。如果保留旧的硬编码路径,会覆盖这个默认行为,导致所有框架的输出都挤在同一个文件夹里。如需自定义输出根路径,改用
<BaseOutputPath>
如果你想指定输出的根目录,不要用OutputPath,而是设置<BaseOutputPath>,示例如下:<PropertyGroup> <BaseOutputPath>bin\</BaseOutputPath> <BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath> </PropertyGroup>SDK会自动在这个根路径下,按
[配置]/[目标框架]的结构生成子文件夹,完美适配多目标编译的输出需求。清理其他冗余的旧项目属性
检查项目文件中是否还有旧的MSBuild残留配置(比如未删除干净的<TargetFrameworkVersion>、多余的<PlatformTarget>之外的旧属性),这些都可能打乱SDK项目的默认行为。
给你一个简化的、正确的多目标SDK风格控制台项目.csproj示例参考:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net35;net40</TargetFrameworks> <OutputType>Exe</OutputType> <LangVersion>latest</LangVersion> <!-- 如需自定义根路径,取消下面两行注释即可,否则可省略 --> <!-- <BaseOutputPath>bin\</BaseOutputPath> --> <!-- <BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath> --> </PropertyGroup> </Project>
修改后重新编译,你就能看到bin\Debug\net35\test.exe和bin\Debug\net40\test.exe分别出现在对应的独立子文件夹里了。
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

