2010-05-06 58 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,无论如何。