2010-05-06 36 views
2

我們使用喬恩斯基特的原CSHARP端口,和我在Visual Studio 2010中Visual Studio 2010和protobuf的-CSHARP端口

與ReSharper的混合,當我們產生運行到一定的困難。通過定製的MSBuild目標CS文件,掛接如下:

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

CompileProtos目標運行ProtoGen,然後將所生成的.cs文件到@(Compile)項目組,通過使用CreateItem。這看起來在一個定義的目錄中並編譯它找到的每個.proto文件,所以它們不在項目中列出。

在哪裏摔倒是ReSharper的不承認的.cs文件的內容(因爲他們在這個項目不是,可能還不存在),所以我不能得到解決分析光去綠色。

如果我將.cs文件添加到項目中,則生成構建失敗,因爲.cs文件已被添加到Compile項目組兩次。

我知道馬克的protobuf網有Visual Studio 2008的goodness在裏面,我在尋找類似的東西,但對於喬恩的protobuf的-CSHARP端口和Visual Studio 2010中

理想的情況下,我d喜歡能夠將.proto文件添加到項目中,讓它們正確構建,並讓Visual Studio和ReSharper知道生成的.cs文件,以便IntelliSense和解決方案分析正常工作。

我猜如果.xsd文件可以隱式生成.cs文件就可以了。

回答

1

我解決它從CompileProtos目標中移除CreateItem,並通過其定義爲一個適當的ItemGroup

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

這意味着,Visual Studio中(和ReSharper的)拿起的.cs文件正確,一旦他們已經建成,ReSharper的完整解決方案分析不再抱怨。

不幸的是,Visual Studio有一個習慣,即將ItemGroup擴展爲單個Compile條目,但我可以在檢查任何內容之前檢查它。

+0

你能分享完整的目標集嗎? – DarkWanderer 2017-01-10 13:00:31

1

我已經嘗試通過實施code generation一個custom tool得到這個工作,但我已經運行到一個看似不可逾越的障礙:

protoc將一個目錄充滿.proto文件並生成一個.protobin文件。然後將其饋送到ProtoGen,它爲每個協議定義分配一個.cs文件。不幸的是,.protobin文件似乎需要包含所有定義,否則您會得到錯誤:無法解析所有依賴關係

由於Visual Studio中的自定義工具模型假設一個輸入文件和一個輸出文件(即foo.proto - > foo.cs),它看起來並不像這樣可以工作。

至少,不是找不到foo.proto的導入.proto文件中的所有文件在foo.protobin,無論如何。