2016-09-19 3 views
3

비 관리 라이브러리 libtidy.dll을 사용하는 응용 프로그램이 있습니다. 우리 코드에서는 래퍼 TidyManaged을 사용하고 있습니다.NuGet 패키지는 관리되지 않는 dll을 bin 대신 루트 디렉토리에 복사합니다.

우리는 다음과 같이 나는 NuGet 패키지를 생성하고이 작업을 수행하려면 bin 디렉토리

에 배치하는 우리 팀의 서비스 개인 패키지 피드 libtidy에 끌어하려는 :

  • 이 만들기 디렉토리 libtidy-managed
  • 함께,이 디렉토리에서
  • 새 디렉토리에 실행 nuget spec을 모두 libtidy.dllTidyManaged.dll를 넣어 다음 파일

Package.nuspec :

<?xml version="1.0"?> 
<package > 
    <metadata> 
    <id>libtidy-tidymanaged</id> 
    <version>1.0.0</version> 
    <authors>Name</authors> 
    <owners>Name</owners> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>Libtidy TidyManaged</description> 
    <releaseNotes>Libtidy TidyManaged</releaseNotes> 
    <copyright>Copyright 2016</copyright> 
    <tags>Libtidy TidyManaged</tags> 
    </metadata> 
    <files> 
     <file src="libtidy.dll" target="content" /> 
     <file src="TidyManaged.dll" target="lib" /> 
     <file src="Install.ps1" target="tools" /> 
    </files> 
</package> 

Install.ps1

param($installPath, $toolsPath, $package, $project) 

$file = $project.ProjectItems.Item("libtidy.dll"); 

If ($file -eq $null) 
{ 
    $project.ProjectItems.AddFromFile("libtidy.dll"); 
    $file = $project.ProjectItems.Item("libtidy.dll"); 
} 

$file.Properties.Item("CopyToOutputDirectory").Value = [int]1; 
그때 nuget pack을 사용하여 패키지를 만들고 로컬 nuget에 새로운 패키지를 참조

먹이.

내가 솔루션 libtidy.dll을 구축

대신 디렉토리

  • 의, 루트 디렉토리에 위치 나는 (루트 디렉토리에) libtidy의 속성을 볼 때 빌드 후 Copy to output directoryCopy always
  • 으로 설정됩니다. build 탭 아래의 프로젝트 속성을 볼 때 Output pathbin\

으로 설정됩니다. 내가 잘못하고있는 것을 누구라도 볼 수 있습니까?

참고 :이 질문은이 Stack Overflow question에서 후속이다 - 허용 대답에서 사용자가 모든 일을해야 말한다, 그러나 나는 여전히이 문제를 얻고있다.

지금까지 내가, 당신의 단계에 따라

답변

2

... 편지에 자신의 지시에 따라하고 볼 수 있듯이, 나는 성공적으로 복사 bin 디렉토리에 libtidy.dll 후 솔루션을 구축 할 수 있습니다. 솔루션을 빌드 할 때 루트 디렉토리의 libtidy.dll이 복사되지 않습니다. 패키지를 설치할 때 추가해야합니다. libtidy.dll은 관리되지 않는 dll이므로 Project Reference에서 직접 참조 할 수 없습니다. 이 유형의 dll은 프로젝트 디렉토리에 추가하여 종종 참조합니다.

솔루션을 빌드 한 후 bin 디렉토리를 확인하십시오. 솔루션 빌드시 복사되는 libtidy.dll도 있어야합니다. 이 dll이 없다면, step2를 확인하고, libtidy.dll, TidyManaged.dll 및 설치를 넣었는지 확인하십시오.ps1 파일도 같은 파일에 있습니다. 프로젝트의 출력 경로는 "bin \ Debug"이어야합니다.

다음은 내 패키지 구조입니다. 패키지와 비교하십시오. enter image description here

+0

답장을 보내 주셔서 감사합니다. 스크립트가 실행 된 후'libtidy'가 예상대로 bin 디렉토리에 있음을 알았습니다. powershell 스크립트를 사용하여 루트 디렉토리에서'libtidy'를 제거하는 방법을 조언 해 주시겠습니까? (필자는 결코 powershell을 사용하지 못했습니다) –

+1

루트 디렉토리에서 libtidy를 제거 할 수 없었습니다. 그것은 관리되지 않는 dll이므로 루트 디렉토리에 추가하여 참조해야합니다. 그리고 프로젝트를 다시 빌드 할 때 bin 폴더가 정리됩니다. libtidy가 루트 디렉토리에서 제거 된 경우 프로젝트를 다시 빌드 할 때 libtidy는 bin 폴더로 복사하지 않습니다. –

관련 문제