2016-08-02 2 views
0

자동화 된 빌드 중에 내 nuget 패키지가 프레임 워크에 종속적 일 필요는 없지만 추가되는 nuget 패키지가 HintPath를 잘못 추가하고 있음을 계속 발견합니다. 나는 패키지의 일부 파일을 정의한 내 nuspec 내NuGet 패키지가 잘못된 힌트 경로를 추가 함

:

그러나

<files> 
    <file src="lib\xyz.dll" target="lib\xyz.dll" /> 
    <file src="lib\xyz.xml" target="lib\xyz.xml" /> 
</files> 

내 프로젝트/솔루션 패키지를 추가 할 때마다, 그것은 잘못 지정하는 힌트 경로를 추가합니다

<Reference Include="xyz, Version=11.0.0.0, Culture=neutral, PublicKeyToken=4a3c0a4c668b48b4"> 
    <HintPath>..\packages\xyz.11.0.0.0\xyz.dll</HintPath> 
    <Private>True</Private> 
</Reference> 

이로 인해 자동 빌드 서버가 어셈블리를 찾지 못하고 빌드에 실패하게됩니다. 나는 수동으로 힌트 경로를 고칠 수는 있지만 오히려하지 않을 것이다.

이 게시물 (Failed to add NuGet package)을 살펴 보았지만 관련성이없는 것으로 나타났습니다. 이 게시물 (NuGet package install uses specific assembly version in csproj files)은 동일한 문제를 언급하는 것처럼 보였지만 답이 없습니다. 아무나 생각이 있니?

답변

1

사용자 지정 MSBuild 작업을 사용하여이 문제를 해결할 수 있습니다.

lib 디렉터리에 어셈블리를 추가하는 대신 패키지 ID의 이름을 가진 MSBuild .targets 파일을 만들고 xyz 어셈블리를 옆에 배치하십시오.

\build 
    \Net45 
     \MyPackage.targets 
     \xyz.dll 
     \xyz.xml 

그런 다음 MSBuild .targets 파일에 정확히 원하는 방식으로 참조를 추가하십시오. 예 :

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <Reference Include="xyz"> 
     <HintPath>$(MSBuildThisFileDirectory)\xyz.dll</HintPath> 
    </Reference> 
    </ItemGroup> 
</Project> 

위의 내용은 MSBuild .targets 파일에 대한 힌트 경로를 지정하는 방법을 보여줍니다. MSBuild에서 xyz.dll을 어떻게 든 GAC에있는 것처럼 제거 할 수 있도록 힌트 경로를 사용하고 싶다고 말했습니까?

+0

완벽 해, 내가 그것을 밖으로 시도하자 그리고 그게 승자가 될 것 같아 –

+0

NuGet 패키지에 대상 파일을 넣을 수 있습니까? 아니면 소비 프로젝트에 넣을까요? –

+0

빌드 디렉토리의 NuGet 패키지에 넣으십시오. 그런 다음 NuGet 패키지가 설치되면 프로젝트에 추가됩니다. Xamarin.Forms 및 Microsoft.Bcl.Build와 같은 사용자 지정 MSBuild 대상을 사용하는 기존 NuGet 패키지가 있습니다. 사람들을 잡는 유일한 길은 .targets 파일이 패키지 ID와 동일한 이름을 가져야한다는 것입니다. –

관련 문제