Visual Studio 2010 и protobuf-csharp-порт - PullRequest
2 голосов
/ 06 мая 2010

Мы используем порт Jon Skeet proto-csharp, и я сталкиваюсь с некоторыми трудностями при его смешивании с ReSharper в Visual Studio 2010.

Мы генерируем файлы .cs через пользовательскую цель MSBuild, подключенную следующим образом:

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

Цель CompileProtos запускает ProtoGen, а затем добавляет сгенерированные файлы .cs в группу элементов @(Compile), используя CreateItem. Он просматривает определенный каталог и компилирует каждый найденный файл .proto, поэтому они не перечислены в проекте.

Сбой в том, что ReSharper не распознает содержимое файлов .cs (потому что их нет в проекте и, возможно, еще не существует), поэтому я не могу заставить индикатор анализа решения стать зеленым .

Если я добавляю файлы .cs в проект, я получаю ошибку сборки, поскольку файл .cs был добавлен в группу элементов Compile дважды.

Я знаю, что у Marto protobuf-net есть Visual Studio 2008 совершенство , и я ищу что-то подобное, но для Jon protobuf-csharp-port и Visual Studio 2010.

В идеале я хотел бы иметь возможность добавлять файлы .proto в проект, правильно их создавать, и Visual Studio и ReSharper знать о сгенерированных файлах .cs, чтобы IntelliSense и анализ решения работали правильно.

Полагаю, что что-то вроде того, как файлы .xsd могут неявно генерировать файлы .cs, помогло бы.

Ответы [ 2 ]

1 голос
/ 11 мая 2010

Я решил это, удалив 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 записи, но я могу проверить это, прежде чем что-либо проверять.

1 голос
/ 06 мая 2010

Я пытался заставить это работать, внедрив пользовательский инструмент для генерации кода , но я натолкнулся на непреодолимое на первый взгляд препятствие:

protoc берет каталог, полный .proto файлов и генерирует файл .protobin. Затем он подается на ProtoGen, который выплевывает файл .cs для каждого определения протокола. К сожалению, похоже, что файл .protobin должен содержать все определения, в противном случае вы получите Ошибка: невозможно разрешить все зависимости .

Поскольку пользовательская модель инструмента в Visual Studio предполагает один входной файл и один выходной файл (т. Е. Foo.proto -> foo.cs), это не похоже на то, что это можно заставить работать.

По крайней мере, без поиска способа включить все импортированные foo.proto файлы .proto в foo.protobin, в любом случае.

...