2011-05-12 4 views
8

ASP.NET 웹 사이트 프로젝트 유형 (적절한 .csproj 또는 .vpproj 프로젝트 파일이없는 프로젝트 유형 및 즉 느슨한 파일의 폴더 일 경우) NuGet을 사용하여 패키지를 추가하면 Bin 디렉토리의 * .dll.refresh 파일이 부모 패키지 폴더의 패키지 dll을 참조하게됩니다.웹 배포 프로젝트에서 ASP.NET "웹 사이트"프로젝트의 * .dll.refresh 파일과 함께 NuGet 사용

예를 들어 패키지 관리자 콘솔에서 "install-package elmah"를 실행하면 Elmah가 프로젝트 솔루션 디렉토리의 패키지 폴더에 저장되고 Elmah.dll.refresh 파일이 프로젝트의 Bin에 저장됩니다 폴더.

로컬로 프로젝트를 빌드 할 때 Visual Studio는 새로 고침 파일에서 참조하는 DLL을 자동으로 가져옵니다. 사이트와 엘마가 제대로 돌아갑니다. 프로젝트의 Bin 디렉터리에있는 Elmah.dll 파일이 소스 제어에 체크인되어 있지 않습니다 (새로 고침 파일과 패키지 폴더 만 체크 인 됨).

그러나 웹 배포 프로젝트를 사용하여 사이트를 미리 컴파일하고 배포를 위해 web.config 대체를 수행합니다. 이 방법으로 솔루션을 빌드하면 Elmah.dll이 웹 사이트 프로젝트 Bin 디렉터리에 자동으로 가져 오지 않으며 누락 된 DLL로 인해 사이트가 제대로 실행되지 않습니다.

NuGet은 이러한 종류의 시나리오에서 어떻게 사용 되나요? Elmah.dll을 Bin 디렉터리에 체크인할까요?

답변

8

위의 GC의 솔루션을 기반으로합니다. 웹 사이트 프로젝트에서 클래스 라이브러리 (csproj)를 추가하고 해당 클래스 라이브러리를 참조하십시오. 클래스 라이브러리에 nuget 패키지를 추가하십시오. 클래스 라이브러리에서 은 실제로 어떤 클래스 파일에서 nuget 패키지를 참조합니다. 어쩌면 쓸모없는 인스턴스 또는 무언가를 만들 수 있습니다. 패키지에 포함 된 클래스를 사용할 수 있습니다. 이렇게하면 .dll이 웹 사이트 프로젝트의 Bin 디렉터리로 복사됩니다.

+0

이것은 테스트되었고 Visual Studio와 빌드 머신에서 MSBuild를 직접 실행하여 작동합니다. –

0

저는 사전 컴파일이 .refresh 파일을 사용하여 DLL을 업데이트하지 않는다고 추측하고 있습니다. 아마도 Visual Studio에서 완료 한 것일 수 있습니다.

할 방법을 찾을 수없는 경우 DLL을 수동으로 bin 폴더에 복사하는 빌드 단계를 만들거나 DLL 사본 두 개가 생기지 않도록 시도 할 수 있습니다. 패키지가 아니라 bin 폴더에 있습니다. NuGet.exe를 사용하여 패키지를 다시 가져 와서 패키지 폴더를 채울 수 있습니다 (herehere 참조)

4

- EDIT - 위의이 솔루션의 업데이트 된 버전을 확인하십시오.

솔루션에 클래스 라이브러리 프로젝트를 추가하고 웹 사이트에 클래스 라이브러리 프로젝트에 대한 참조를 추가하기 만하면됩니다.

그런 다음 웹 사이트 프로젝트가 아닌 클래스 라이브러리에 너겟을 추가하십시오.

웹 사이트가 빌드되면 모든 클래스 라이브러리의 종속성을 차례로 가져옵니다.

관련 문제