.NET7-Windows项目添加XAML本地命名空间后源生成文件未包含的解决方法
解决WPF添加本地命名空间后源生成器文件丢失的编译错误
在.NET7 Windows项目中,使用MimeTypes这类源生成器原本可正常编译运行。但在WPF用户控件的XAML文件中添加本地命名空间声明xmlns:local="clr-namespace:Example"后,生成的MimeTypes文件不再被项目包含,进而触发编译错误CS0103(当前上下文中不存在名称“MimeTypes”)。
修改项目文件的解决方案
只需在项目文件(.csproj)中添加显式的文件包含规则,确保所有源生成器输出的C#文件都被纳入编译。修改后的完整项目文件如下:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net7.0-windows</TargetFramework> <LangVersion>10</LangVersion> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <UseWindowsForms>true</UseWindowsForms> <UseWPF>true</UseWPF> <NoWarn>CA1416</NoWarn> </PropertyGroup> <PropertyGroup> <OutputType>Library</OutputType> </PropertyGroup> <!-- 新增规则:递归包含所有源生成的C#文件 --> <ItemGroup> <Compile Include="$(BaseIntermediateOutputPath)**/*.cs" /> </ItemGroup> <ItemGroup> <PackageReference Include="MimeTypes" Version="2.4.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup> </Project>
规则说明
添加的<Compile Include="$(BaseIntermediateOutputPath)**/*.cs" />会递归扫描项目的中间输出目录(默认是obj文件夹),将所有源生成器生成的C#文件强制纳入编译范围,避免因WPF XAML编译逻辑变更导致生成文件被遗漏。
内容的提问来源于stack exchange,提问作者Benny Bürger
相关产品推荐
相关产品推荐

