2011-09-16 3 views
5

this에 따르면 솔루션 외부의 프로젝트를 참조하고 VS 및 명령 줄에서는 작동하지만 TFS에서는 작동하지 않아야합니다.VS2010의 솔루션 외부에서 프로젝트 참조

불행히도이 방법으로 내 솔루션을 분할하려고 시도했지만 VS2010/devenv 나 msbuild에서는 작동하지 않았습니다.

는 두 경우 모두 오류 :

이 OutputPath 속성이 'Common.csproj'프로젝트에 설정되어 있지 않습니다. 이 프로젝트에 대해 구성 및 플랫폼의 올바른 조합 을 지정했는지 확인하십시오. 구성 = '디버그' 플랫폼 = 'AnyCPU'. 다른 프로젝트 이이 프로젝트에 대한 프로젝트 - 프로젝트 참조를 따르려고하면 이 프로젝트가 언로드되었거나 솔루션에 포함되어 있지 않고 참조하는 프로젝트가 동일한 프로젝트를 사용하여 빌드하지 않았습니다. 또는 이에 해당하는 구성 또는 플랫폼.

그러나 현재 플랫폼은 "x86"이며 VS 또는 msbuild에서 설정 한 플랫폼 및 구성에 관계없이 항상 Debug|AnyCPU을 시도합니다. msbuild의 경우 /p:OutputPath=bin\x86\Debug을 설정하면 자식 프로젝트에 올바르게 전파됩니다.

이 버그가 있습니까? 해결할 수 있습니까?

UPDATE는

bug in MS Connect 발견. 불행하게도이

찾을 해결 방법을 :(

UPDATE를 수정하지 않음으로 폐쇄 : ShouldUnsetParentConfigurationAndPlatform=false을 설정 MSBuild를위한 명령 줄 및 Visual Studio를 해결하는 (어떤 수입 전) 프로젝트 파일에 모두

답변

0
..

문제점을 올바르게 이해 한 경우 실제로는 AssignProjectConfiguration 대상이 해당 프로젝트의 구성/플랫폼 등록 정보를 올바르게 설정하지 않아서 발생합니다.

구성 및 플랫폼이 무엇인지 알고 있다면 방법은 그냥 AssignProjectConfiguration 대상 바로 다음에 실행할 대상을 삽입하고 해결되지 않은 (솔루션 구성의 일부가 아닌) 프로젝트 간 참조를 나타내는 각 항목의 SetConfiguration 및 SetPlatform 속성을 재정의합니다.

  1. 그냥 설정 : 바보 같은 이유로

    은 Microsoft에서 제공하는 대상이 옵션을 남긴다 (아무데도하지만) 해결되지 않은 프로젝트 해결 된 것과 같은 컬렉션의 참조 목록을 저장 각 프로젝트의 속성을 수동으로 (즉, 주입 된 타겟 내부의 동적 ItemGroup 요소를 통해 하드 코딩).
  2. 삽입 된 대상에서 AssignProjectConfiguration 작업을 직접 호출하고 할당되지 않은 출력을 수집하여 선택한 모든 기본 구성/플랫폼을 할당합니다.
  3. 는 에게 는

    어느 쪽이든, 당신이 올바르게 구성 프로젝트 참조 목록을 한 후에는 간단하게 다음 제거와 다른 동적 ItemGroup 요소를 사용하여 (그들의 수동으로 수정 대응과 ProjectReferenceWithConfiguration 항목 그룹에서 해결되지 않은 항목을 대체 할 수있는 포함

).

당신을 진심으로 환영합니다. 나는 당신이하는 것처럼 일을하지 않을 것입니다. 제품을 여러 솔루션으로 분할하려면 각 솔루션이 공통 출력 영역에 공유 출력을 게시하고 함께 연결할 수있는 .proj 스크립트가 있어야합니다. 저는 명령 행 스타일의 MSBuild와 내부 VS 스타일의 MSBuild가 섞이지 않는 어려운 방법을 배웠습니다. MSBuild가 아닌 다른 프로젝트 시스템과의 상호 운용성을 보장하기 위해 약간의 절충안을 만들었습니다.이 중 AssignProjectConfiguration-with-VS -provided-solution-config-XML 프로세스가 하나임).

+0

다른 솔루션을 선택했지만 답변으로 표시됩니다. –

0

나는 VS2012에서 비슷한 것을 발견했습니다. 나에게 그것은 빌드 중 AssignProjectConfiguration 대상의 ShouldUnsetParentConfigurationAndPlatform 속성과 관련이 있습니다. 이로 인해 "GlobalPropertiesToRemove = Configuration; Platform"이 발생하여 프로젝트 참조를 위해 구성 및 플랫폼 속성이 지워졌습니다.

도구 -> 옵션 -> 프로젝트 및 솔루션 -> 빌드 및 실행 -> MSBuild 프로젝트 빌드 출력 상세 설정 -> 진단을 설정 한 후 빌드 출력 창에서이 작업을 볼 수있었습니다.

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 

이 솔루션은 수정했다 : 빈 구성/플랫폼으로

이 심지어 릴리스 빌드에서 프로젝트 출력에 디버그 어셈블리의 결과로, 내 프로젝트의 일부가 일치하는에 다음 줄을 발생 해당 csproj 파일을 지정하여 구성 변수가 비어 있거나 공백 인 경우 사용할 구성으로 릴리스 :

<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration> 
관련 문제