提问人:Drachencheat 提问时间:5/21/2023 更新时间:5/26/2023 访问量:360
VS 和 Rider 忽略源生成器生成的文件
VS and Rider ignore source generator generated files
问:
C# 源代码生成的文件被忽略或显示错误,但当我将文件复制出来时,一切正常。
州。Text.g.cs
using System.Collections.Generic;
using System.Linq;
#nullable enable
namespace GeneratorUnitTestProject.StateMachineTests
{
//[...]
}
它说错误是预期的 CS1001 标识符。
如果我复制生成的文件并删除生成器,它就可以正常工作,并且我的单元测试成功。
这是我的单元测试解决方案的 csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.4.2" />
<PackageReference Include="NUnit.Analyzers" Version="3.6.1" />
<PackageReference Include="coverlet.collector" Version="3.2.0" />
<ProjectReference Include="..\TaskReward.Expander\TaskReward.Expander.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="StateMachineTests\Text.xstate" />
</ItemGroup>
</Project>
这是我的发电机的 csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>Latest</LangVersion>
<Nullable>enable</Nullable>
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.6.0" PrivateAssets="all" />
</ItemGroup>
<ItemGroup>
<!-- Generator dependencies -->
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" PrivateAssets="all" GeneratePathProperty="True" />
</ItemGroup>
<PropertyGroup>
<GetTargetPathDependsOn>$(GetTargetPathDependsOn);GetDependencyTargetPaths</GetTargetPathDependsOn>
</PropertyGroup>
<Target Name="GetDependencyTargetPaths">
<ItemGroup>
<TargetPathWithTargetPlatformMoniker Include="$(PKGNewtonsoft_Json)\lib\netstandard2.0\Newtonsoft.Json.dll" IncludeRuntimeDependency="false" />
<!-- Pack both our DLL and the dependencies into a generated Nuget Package -->
<None Include="$(OutputPath)\$(AssemblyName).dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
<None Include="$(PKGNewtonsoft_Json)\lib\netstandard2.0\Newtonsoft.Json.dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
</ItemGroup>
</Target>
</Project>
如果我继续在命名空间前面添加一个“gen.”,则错误将更改为未找到命名空间。(CS0246) 但是 IDE(Rider 或 VS)不会在 UI 中显示任何错误。就像它被忽略了一样,但错误日志没有说明它。
Fehler beim Buildvorgang.
"...\GeneratorUnitTestProject\GeneratorUnitTestProject.csproj" (build Ziel) (1) ->
(CoreCompile Ziel) ->
...\GeneratorUnitTestProject\...\....Gen.State.Statemachines\state.Text.g.cs(172,106): warning CS8669: Die Anmerkung für Nullable-Verweistypen darf nur in Code innerhalb eines #nullable-Anmerkungskontexts verwendet werden. Für automatisch generierten Code ist eine explizite #nullable-Anweisung in der Quelle erforderlich.
"...\GeneratorUnitTestProject\GeneratorUnitTestProject.csproj" (build Ziel) (1) ->
(CoreCompile Ziel) ->
...\GeneratorUnitTestProject\StateMachineTests\MachineTest.cs(1,7): error CS0246: Der Typ- oder Namespacename "gen" wurde nicht gefunden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis).
1 Warnung(en)
1 Fehler
答:
4赞
Jeff
5/26/2023
#1
每当 Microsoft 更新其 C# 分析器库时,这都是一个反复出现的问题。
将分析器软件包降级到 4.5.0,直到 IDE 赶上。
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.5.0" PrivateAssets="all" />
另外,每当更新时,可能还需要更新 dotnet SDK。例如,工作正常,但是升级到需要 SDK 版本,否则构建将显示根本没有运行源代码生成器。Microsoft.CodeAnalysis.CSharp
4.5.0
7.0.201
4.6.0
7.0.302
评论
0赞
Jeff
8/28/2023
@Drachencheat 4.6.0 的问题已在 Rider 方面得到解决。但现在也有更新版本的分析器包。
评论