2012-12-03 4 views
3

코드 계약을 사용하여 프로젝트의 위성 어셈블리를 생성하고 있습니다. 기본적으로 프로젝트의 MyAssembly.dll에 대한 MyAssembly.Contracts.dll을 만듭니다. 이것은 당신의 어셈블리 옆에 놓이게 될 것이지만, 어떤 어플리케이션에 의해서도 참조되지 않는다. 그것은 계약 툴에서만 사용된다..nuspec의 코드 계약 참조 제어

나는 이것을 내 너겟 패키지에 포함하려고 시도하지만 그 패키지를 다른 앱에 설치하면 계약 어셈블리가 문제를 만드는 참조로 포함됩니다.

.nuspec reference에 따르면이 값은 references 요소를 추가하는 것처럼 간단해야하지만 무시되는 것으로 보입니다. 현재 이론은 이것이 대체 토큰에 .csproj를 사용하고 있기 때문에 .csproj가 아닌 .nuspec에서 참조를 읽었 기 때문입니다.

이전에이 작업을 수행 한 사람이 있습니까? 어떤 아이디어? 있습니다 내가 오버 패키지 복사하는 새로운 MyPackage.CodeContracts을 만드는 권하고 싶습니다, 별도의 옵션 어셈블리 코드 계약으로

<?xml version="1.0"?> 
<package> 
    <metadata> 
    <references> 
      <reference file="MyAssembly.dll"/> 
    </references> 
    </metadata> 
    <files> 
    <file src="bin\Release\CodeContracts\*.dll" target="lib\net45"/> 
    </files> 
</package> 
+0

그래서 지금은 효과가 있습니까? 나는 최근 [이 질문] (http://stackoverflow.com/questions/28192428/how-do-i-include-contract-assemblies-in-the-nupkg-automatically)을 올렸다. 현재 프로세스에서 nuspec 파일의 하드 코딩 된 경로를 참조 할 수 없습니다. 대신에 너게가 자동으로 계약 어셈블리를 발견하도록하고 싶습니다. – julealgon

답변

4

: 여기

는 관련 내 .nuspec의 일부입니다 필요한 경우 어셈블리를 계약합니다. 이 작업은 간단한 PowerShell 스크립트 (install.ps1 + uninstall.ps1)를 사용하여 도구 패키지으로 수행 할 수 있습니다.

예를 들어 MyPackage.Sample 패키지를 만드는 것과 비슷한 접근 방식입니다. 규칙 기반 디렉토리를 사용하여 패키지를 만들고 대신 .nuspec 파일을 대상으로 지정하십시오. 문제가 적어지고 IMHO가 더 좋은 솔루션입니다.

+0

이것이 내가 바라는 답변이 아닙니다. 필요한 것보다 조금 더 많은 작업이 필요합니다. 그러나 이것이 유일한 옵션 인 것 같습니다. 감사! –

1

최신 NuGet 버전은 원래 의도했던대로 작동하고 파일을 참조하지 않고 포함시킵니다. 커스텀 인스톨러가 필요 없습니다.

+1

현재 깨진 것 같습니다.lib 폴더의 계약이 복사되지 않고 무시됩니다. – nicodemus13

0

이 또한 저에게 중요한 문제였습니다. 내가로하여 Nuget 샘플로 복제 한 : https://github.com/NuGet/Samples/issues/3

패키지 \ 메타 데이터 \ 그룹 \ 참조 노드 문서 \ 참조 : https://social.msdn.microsoft.com/Forums/en-US/fe7fad45-a474-4157-a4ee-3f94a2b1071f/nuget-package-dependency-reference-not-added-to-project?forum=visualstudiogeneral

샘플 nuspec : 동일한 문제와 다른 http://docs.nuget.org/docs/reference/nuspec-reference#Specifying_Explicit_Assembly_References_in_version_2.5_and_above

사람 :

<references> 
     <reference file="My.ServiceBusEntities.dll" /> 
    </references> 
</metadata> 
<files> 
    <file src="bin\Debug\My.ServiceBusEntities.dll" target="lib\net45\ServiceBusEntities.dll" /> 

참고 : 올바른 일치하는 "net45"프레임 워크 폴더가 파일에 있어야합니다. 대상 속성이 프로젝트와 일치해야합니다 목표 (즉, 프레임 워크 4.5).

다른 프레임 워크가 지정되어 있지 않으며 대상 프로젝트에 추가 된 참조가 표시됩니다. 즉

<file src="bin\Debug\My.ServiceBusEntities.dll" target="lib\ServiceBusEntities.dll" /> 
관련 문제