あるC#プロジェクトから別のプロジェクトにクラスをインポートするときに自動生成されたファイルを除外することは可能ですか?
protoファイルから生成されたクラスに基づいてGRPCサービスを実装するプロジェクトが1つあります。
また、GRPCサービスのような最初のプロジェクトのクラスをテストする別のプロジェクトがあります。2番目のプロジェクトでは、GRPCクライアントを実装して、protoファイルの同じコピーを使用してGRPCサービスをテストしました。
問題は、最初のプロジェクトのすべてのクラスをインポートし、残念ながらそれらのいくつかが同じプロトファイルで生成され、クラス名の衝突について多くの警告があることです。
同じソリューションのプロジェクト間で特定のファイルのみをインポートする方法はありますか?
プロジェクトファイルの次のディレクティブを使用して、クラスを生成します。
<ItemGroup>
<Protobuf Include="Protos\Proto.proto" GrpcServices="Server" />
</ItemGroup>
<ItemGroup>
<Protobuf Include="Protos\Proto.proto" GrpcServices="Client" />
</ItemGroup>
そして、最初のプロジェクトのクラスを次のように2番目のプロジェクトにインポートします。
<ItemGroup>
<ProjectReference Include="..\core\First.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]
タイプを条件付きでインポートすることはできませんが、2番目のプロジェクトにインポートするときに、最初のプロジェクトのタイプにexternエイリアスを追加できます。
次のスニペットを2番目の.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;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加