2

Jon Skeet の proto-csharp-port を使用していますが、Visual Studio 2010 で ReSharper と混合するときに問題が発生しています。

次のように接続されたカスタム MSBuild ターゲットを介して .cs ファイルを生成します。

<Target Name="BeforeBuild" DependsOnTargets="CompileProtos" />

CompileProtosターゲットが実行され、 .cs ファイルを使用して、生成された .cs ファイルが項目グループにProtoGen追加されます。これは、定義されたディレクトリを検索し、見つかったすべての .proto ファイルをコンパイルするため、それらはプロジェクトにリストされません。@(Compile)CreateItem

問題は、ReSharper が .cs ファイルの内容を認識しないことです (プロジェクトに含まれておらず、まだ存在していない可能性があるため)。そのため、ソリューション分析ライトを緑色に点灯させることができません。

.cs ファイルをプロジェクトに追加すると、.cs ファイルがCompileアイテム グループに 2 回追加されているため、ビルド エラーが発生します。

Marc の protobuf-net には Visual Studio 2008 の優れた機能が含まれていることを知っています。同様のものを探していますが、Jon の protobuf-csharp-port と Visual Studio 2010 が対象です

理想的には、プロジェクトに .proto ファイルを追加して正しくビルドし、生成された .cs ファイルを Visual Studio と ReSharper に認識させて、IntelliSense とソリューション分析が適切に機能するようにしたいと考えています。

.xsd ファイルが暗黙的に .cs ファイルを生成する方法のようなものがうまくいくと思います。

4

2 に答える 2

1

コード生成用のカスタムツールを実装してこれを機能させようとしましたが、一見克服できないハードルに遭遇しました。

protocファイルでいっぱいのディレクトリを取り、.protoファイルを生成し.protobinます。次に、これがフィードさProtoGenれ、プロトコル定義ごとに.csファイルが吐き出されます。残念ながら、.protobinファイルにはすべての定義が含まれている必要があるようです。含まれていないと、エラー:すべての依存関係を解決できません

Visual Studioのカスタムツールモデルは、単一の入力ファイルと単一の出力ファイル(つまり、foo.proto-> foo.cs)を想定しているため、これを機能させることができるようには見えません。

少なくとも、とにかく、foo.protoインポートされたすべての.protoファイルをに含める方法を見つける必要があります。foo.protobin

于 2010-05-06T14:20:17.163 に答える
1

CreateItemをターゲットから削除し、CompileProtosそれを適切な として定義することで解決しましたItemGroup

<ItemGroup>
  <Protocols Include="$(ProtocolsPath)\*.proto"/>
</ItemGroup>
<ItemGroup>
  <Compile Include="@(Protocols -> '%(Filename).cs')"/>
</ItemGroup>

つまり、ビルドが完了すると、Visual Studio (および ReSharper) が .cs ファイルを正しく取得し、ReSharper の完全なソリューション分析で問題が発生しなくなります。

残念ながら、Visual Studio にはItemGroupを個々のCompileエントリに展開する習慣がありますが、何かをチェックインする前にそれを確認できます。

于 2010-05-11T14:48:32.790 に答える