首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual Studio 2010和protobuf-csharp-port

Visual Studio 2010和protobuf-csharp-port
EN

Stack Overflow用户
提问于 2010-05-06 20:56:06
回答 2查看 1.6K关注 0票数 2

我们使用的是Jon Skeet的proto-csharp-port,当我在Visual Studio2010中将其与ReSharper混合使用时遇到了一些困难。

我们通过一个定制的MSBuild目标生成.cs文件,如下所示:

代码语言:javascript
复制
<Target Name="BeforeBuild" DependsOnTargets="CompileProtos" />

CompileProtos目标运行ProtoGen,然后使用CreateItem将生成的.cs文件添加到@(Compile)项目组。这将在一个已定义的目录中查找,并编译它找到的每个.proto文件,因此它们不会在项目中列出。

它的缺点是ReSharper不能识别.cs文件的内容(因为它们不在项目中,可能还不存在),所以我无法让解决方案分析灯变绿。

如果我将.cs文件添加到项目中,则会得到一个构建失败,因为.cs文件已经被添加到Compile项组中两次。

我知道Marc的protobuf-net中有Visual Studio2008 goodness,我正在寻找类似的东西,除了Jon的protobuf-csharp-port和Visual Studio2010。

理想情况下,我希望能够将.proto文件添加到项目中,正确构建它们,并让Visual Studio和ReSharper了解生成的.cs文件,以便IntelliSense和解决方案分析正常工作。

我猜想像.xsd文件如何隐式地生成.cs文件这样的东西就能做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-11 22:48:33

我解决这个问题的方法是从CompileProtos目标中删除CreateItem,并将其定义为适当的ItemGroup

代码语言:javascript
复制
<ItemGroup>
  <Protocols Include="$(ProtocolsPath)\*.proto"/>
</ItemGroup>
<ItemGroup>
  <Compile Include="@(Protocols -> '%(Filename).cs')"/>
</ItemGroup>

这意味着一旦.cs文件被构建,Visual Studio (和ReSharper)就可以正确地提取它们,ReSharper的完整解决方案分析就会停止抱怨。

不幸的是,Visual Studio习惯于将ItemGroup扩展到单独的Compile条目中,但我可以在签入任何内容之前对其进行检查。

票数 1
EN

Stack Overflow用户

发布于 2010-05-06 22:20:17

我试图通过为code generation实现一个custom tool来实现这一点,但我遇到了一个看似不可逾越的障碍:

protoc获取一个包含.proto文件的目录,并生成一个.protobin文件。然后将其提供给ProtoGen,后者为每个协议定义输出一个.cs文件。不幸的是,.protobin文件似乎需要包含所有的定义,否则您会得到错误: Unable to resolve all dependencies

由于Visual Studio中的自定义工具模型假设只有一个输入文件和一个输出文件(即foo.proto -> foo.cs),所以看起来不能让它工作。

至少,如果找不到将所有foo.proto导入的.proto文件都包含在foo.protobin中的方法,至少不是这样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2781227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档