导入Props文件的C#项目忽略OutputType问题求助
解决思路
1. 修正共享Props文件的结构
你的ProjectsCommon.props错误地使用了<Project Sdk="Microsoft.NET.Sdk">声明,这会导致导入时重新加载SDK,干扰主项目的默认配置(比如控制台项目的OutputType默认值)。将其改为普通的MSBuild属性文件:
<Project> <PropertyGroup> <BaseNamespace>Shared.Namespace</BaseNamespace> <Company>My company</Company> <Authors>Author's name</Authors> <Copyright>$(Company)</Copyright> </PropertyGroup> <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <RootNamespace>$(BaseNamespace).$(MSBuildProjectName.Replace(" ", "_"))</RootNamespace> <!-- 设置默认输出类型为类库,让EXE项目自行覆盖 --> <OutputType>Library</OutputType> </PropertyGroup> </Project>
2. 调整项目文件的导入顺序与属性设置
在每个EXE项目的.csproj文件中,先导入共享Props,再明确设置OutputType为Exe,利用MSBuild后声明属性覆盖先声明的规则:
<Project Sdk="Microsoft.NET.Sdk"> <!-- 先导入共享配置 --> <Import Project="..\ProjectsCommon.props" /> <!-- 覆盖输出类型为EXE --> <PropertyGroup> <OutputType>Exe</OutputType> <!-- 其他项目专属配置可添加在此 --> </PropertyGroup> <!-- 项目依赖、资源等其他配置 --> </Project>
3. 核心原理
- 共享Props中设置默认
OutputType=Library,确保类库项目无需额外配置即可正确编译。 - EXE项目通过在导入Props后声明
OutputType=Exe,覆盖默认值,同时保留共享配置中的其他属性。 - 移除Props文件的
Sdk声明,避免重复加载SDK导致的默认配置冲突。
内容的提问来源于stack exchange,提问作者Master DJon
相关产品推荐
相关产品推荐

