2010-08-04 4 views
2

다음과 같은 이상한 동작에는 어떤 이유가있을 수 있으며 문제를 어떻게 추적 할 수 있습니까?왜 csproj 파일의 일부 요소에는 일부 환경 변수를 사용할 수 있습니까? 그러나 msbuild에는 다른 일부 변수를 사용할 수 없습니까?

우리는 make 파일과 msbuild의 조합을 사용합니다.

나는 강하게 지명 될 필요가있는 프로젝트가있다. 나는 이전에이 같은 프로젝트 파일에 사용하기 위해 SNK을 설정했다 :

set EnvironmentVariable='SomePath' 

이이 일 :되는 EnvironmentVariable이 같은 빌드 쉘을 시작 배치 파일에 정의

<AssemblyOriginatorKeyFile>$(EnvironmentVariable)TheKeyName.snk</AssemblyOriginatorKeyFile> 

승인. 이제 변경할 수 있도록 문자열 이름 키가 필요하므로 dev 컴퓨터와 릴리스 빌드 서버에서 다를 수 있습니다. StrongNameKeyFile이라는 강력한 이름 키 파일에 대한 전체 경로를 보유하기 위해 존재하는 변수가 있습니다. 이것은 msbuild 환경에 정의되어 있습니다. 그리고 프로젝트를 빌드하는 msbuild 태스크의 일부로 포함 된 대상 또는 특성 파일에 텍스트 출력을 넣으면이 StrongNameKeyFile이 올바른 위치를 가리키는 것을 볼 수 있습니다. 그래서 내가 대신이를 위해 csproj을 변경 :

<AssemblyOriginatorKeyFile>$(StrongNameKeyFile)</AssemblyOriginatorKeyFile> 

을하지만 난 시도하고이 비워 평가하고 컴파일 할 때 및/키 파일은 빌드하는 동안 지정되지 않습니다.

또한 make 파일에 정의 된 변수가 있으며 csproj에서도 변수에 액세스 할 수 있습니다. 이것은 참조 된 dll의 위치를 ​​가리키는 데 사용되므로 dev 및 빌드 머신에서 다를 수 있습니다. 나는 이것들이 참조가 올바르게 나오고 모든 것이 컴파일되도록 설정되어 있지만 AssemblyOriginatorKeyFile 요소에서 이러한 변수 중 하나를 사용하려고하면 해당 요소에서 비어있는 것으로 평가되지만 참조 요소에서 작동한다는 것을 알고 있습니다.

왜 이럴 수 있습니까? AssemblyOriginatorKeyFile은 특별히 어떻게 든 처리됩니까? 그 원인을 추적하려면 어떻게해야합니까?

+0

프로젝트 디렉토리에 $ (StrongNameKeyFile) 상대 경로인가? –

+0

아니요, $ (StrongNameKeyFile)은 키 파일의 절대 경로입니다 –

+0

AssemblyOriginatorKeyFile은 프로젝트 파일에 상대적인 경로 여야한다고 생각합니다. –

답변

2

정상적으로 작동하는 이유는 없습니다. 정상적으로 작동합니다. 그것은 바닥에 떨어 뜨리는 사슬에서 뭔가가 될 가능성이 있습니다.

/p : StrongNameKeyFile = XX를 통해 명시 적으로 전달하는 것 중 하나는 환경 변수 및 사용자의 질의에서 올바른 전파를 제거하는 것입니다.

또 다른 잠재적 인 것은 이름이 뭔가 다른 용도로 사용되기 때문에 무언가가 변수를 clobbering한다는 것입니다.

/v : diag와 함께 실행하면 변경되는 모든 입력 및/또는 변수의 덤프가 발생합니다.

또는 V4의 경우

MSBuild Debugger

을 사용하여 구입 Hashimi et al MSBuild book

+0

감사합니다./v : diag는 내가 찾고있는 것일 수도 있습니다. 최대한 빨리 시도해 보겠습니다. –

관련 문제