2

우리는 존 소총의 프로토 CSHARP 포트를 사용하고, 우리는을 생성 Visual Studio 2010에서 Visual Studio 2010을비주얼 스튜디오 2010 protobuf-CSHARP 포트

에서 ReSharper에서과 혼합했을 때 어떤 어려움 실행 해요. 로 엮은 사용자 지정 MSBuild에서 대상을 통해 CS 파일은 다음과 같습니다

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

CompileProtos 대상 ProtoGen를 실행 한 후 CreateItem을 사용하여, @(Compile) 항목 그룹에 .cs 생성 된 파일을 추가합니다. 이것은 정의 된 디렉토리를 찾고 찾은 모든 .proto 파일을 컴파일하므로 프로젝트에 나열되지 않습니다.

ReSharper가 .cs 파일의 내용을 인식하지 못하는 이유는 프로젝트에 없기 때문에 ReSharper가 솔루션 파일을 인식 할 수 없기 때문입니다. 녹색.

프로젝트에 .cs 파일을 추가하면 .cs 파일이 Compile 항목 그룹에 두 번 추가되었으므로 빌드가 실패합니다.

나는 마크의 protobuf - 그물 거기에 비주얼 스튜디오 2008 goodness을 가지고 있다는 것을 알고 난 비슷한 찾고 있어요,하지만 이상적으로 2010 년

존의 protobuf-CSHARP - 포트 및 Visual Studio, 나는 ' .proto 파일을 프로젝트에 추가하고 올바르게 작성한 다음 Visual Studio 및 ReSharper에 생성 된 .cs 파일에 대해 알리면 IntelliSense 및 솔루션 분석이 제대로 작동합니다.

.xsd 파일이 .cs 파일을 암시 적으로 생성 할 수있는 방법과 같은 것이 트릭을 수행한다고 생각합니다.

답변

1

는 I, 그리고 적절한 ItemGroup로 정의하여 CompileProtos 대상에서 CreateItem를 제거하여 그것을 해결 :

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

이 비주얼 스튜디오 (및 ReSharper에서)을 한 번 정확하게 .cs를 파일 픽업 것을 의미 그들은 만들어졌고 ReSharper의 전체 솔루션 분석은 불평을 멈추었습니다.

불행히도 Visual Studio는 ItemGroup 항목을 개별 Compile 항목으로 확장하는 습관이 있지만 그 내용을 확인하기 전에 확인할 수 있습니다.

+0

전체 대상 세트를 공유 할 수 있습니까? – DarkWanderer

1

나는 code generation에 대한 custom tool를 구현하여이 작업을 얻기 위해 시도했지만, 나는 겉으로는 극복 할 수없는 장애물로 실행했습니다

protoc.proto 파일의 전체 디렉토리를 취하고 .protobin 파일을 생성합니다. 이것은 ProtoGen으로 보내지며 각 프로토콜 정의에 대해 .cs 파일이 만들어집니다. 아쉽게도 .protobin 파일에 모든 정의가 포함되어 있어야합니다. 그렇지 않으면 오류 : 모든 종속성을 해결할 수 없습니다..

Visual Studio의 사용자 지정 도구 모델은 단일 입력 파일과 단일 출력 파일 (즉, foo.proto -> foo.cs)을 사용하기 때문에 작동하지 않는 것처럼 보입니다.

최소한 foo.proto 님이 가져온 .proto 개의 파일을 모두 포함하는 방법을 찾지 못한 채로 foo.protobin에 있습니다.

관련 문제