将类从一个 C# 项目导入到另一个项目时是否可以排除自动生成的文件?



将类从一个 C# 项目导入另一个项目时是否可以排除自动生成的文件?

我有一个基于原型文件生成的类实现 GRPC 服务的项目。

另外,我还有另一个项目,我在其中测试第一个项目的类,例如GRPC服务。在第二个项目中,我实现了一个 GRPC 客户端,以使用相同的原型文件副本测试 GRPC 服务。

问题是我导入了第一个项目的所有类,可悲的是其中一些类是使用相同的原型文件生成的,并且有很多关于类名冲突的警告。

有没有办法在同一解决方案的项目之间仅导入特定文件?

我在项目文件中使用 next 指令来生成类:

  • 在第一个项目中:
<ItemGroup>
<Protobuf Include="ProtosProto.proto" GrpcServices="Server" />
</ItemGroup>
  • 在第二个中:
<ItemGroup>
<Protobuf Include="ProtosProto.proto" GrpcServices="Client" />
</ItemGroup>

我将第一个项目的类导入到第二个项目中,如下所示:

<ItemGroup>
<ProjectReference Include="..coreFirst.csproj" />
</ItemGroup>

警告是这样的:

TestClient.cs(53,29): warning CS0436: The type 'Type1' in '/folder1/solution/test_project/obj/Debug/netcoreapp3.1/Class1.cs' conflicts with the imported type 'Type1' in 'Project1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Using the type defined in '/folder1/solutiion/test/obj/Debug/netcoreapp3.1/Class1.cs'. [/folder1/solution/test_project/Project2.csproj]

我通常在单个程序集中创建原型文件及其生成的代码,然后从服务和客户端程序集引用该程序集。 这样可以保留代码生成一次,并消除重复的代码生成。

不能有条件地导入类型,但在将第一个项目导入第二个项目时,可以向其中的类型添加 extern 别名。

将以下代码片段添加到第二个 .csproj

<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'First'">
<Aliases>FirstExtern</Aliases>
</ReferencePath>
</ItemGroup>
</Target>

现在可以显式定义要使用的类型: 在.cs代码中的所有用法之上添加以下内容:

extern alias FirstExtern;

并通过指定定义的别名来引用第一个项目中的类型:

FirstExtern::First.Type1 variable;

相关内容

最新更新