2015-01-13 1 views
6

이 포함되어 있습니다. 파일이 자동으로 포함되지 않게하려고합니다.: 기본을 무시이 나는 보통 사람들이 파일이 NuGet 패키지에 포함려고하는, 읽어 것과 정반대의 문제입니다

미리 컴파일 된 MVC 뷰 템플릿 (RazorGenerator.Mvc 사용), .less 파일 및 JavaScript를 필요에 따라 지원하는 라이브러리를 만들고 있습니다. 이 아이디어는 모든 사이트에 적용되는 기본 사항입니다. 프로젝트, 새로 만들어보기, .less 파일 또는 스크립트가 될 것에서 내용을 기본적으로

, nuget pack 어떤 파일이 빌드 작업 표시 포함되어 있습니다. 이 동작을 무시할 수있는 옵션이없는 것 같습니다. 이와 관련된 질문은 여기 empty <files> node in the .nuspec to stop all includes의 해결책을 제시하지만 난 일부 파일, 내가 선택한 단지에만 사람을 포함 할.

자, 임시 변통으로, 내가 통해 갈 수 있습니다, 명시 적으로 설정 모든 수 없습니다 내용, 내가 원하는 위치 내가하고 복사하지 않으려하고 파일을 다음 명시 적으로 설정 (대신 없음를 사용하지 않음) .nuspec 파일을 사용하여 복사했습니다. 그러나 내 미래의 자아와 같은 다른 개발자가이 단계를 잊어 버리면 새로 추가 된 파일이 패키지에 복사 된 후 다음 설치 또는 업데이트 중에 대상 프로젝트에 복사됩니다.

나는 OctoPack하고, 즉시이 .nuspec에서 <files> 노드를 감지하는 기본적으로 아무것도 포함하지 그 뜻을 발견,하지만 난 방법을 이해하기 위해 인 TeamCity에서 무엇을 사용하고 내 빌드 서버 스크립트를 다시 작성하고 있지 않다 nuget pack 대신 OctoPack을 호출하면 좋은 옵션으로 나를 공격하지 않습니다. OctoPack에는 한계가 있습니다. 의존성을 수동으로 나열해야하며 .nuspec 파일의 대체 토큰은 (AssemblyInfo.cs에서 읽는 대신) 명령 줄에서 전달되어야하며 도구가이 용도로 사용 된 것 같지 않습니다. "OctoPack은 배포하려는 프로젝트에만 설치해야합니다. 즉, 콘솔 응용 프로그램 프로젝트, Windows 서비스 프로젝트 및 ASP.NET 웹 응용 프로그램을 의미합니다. 단위 테스트, 클래스 라이브러리 및 기타 지원 프로젝트는 선택되지 않습니다. . " (OctoPack Documentation)

나는 단순히 BeforeBuild 이벤트 기간 동안 컨텐츠 그룹을 쓸어 msbuild를 사용하여 한 시도 다음 대안 :

<Target Name="BeforeBuild"> 
    <ItemGroup> 
     <Content Remove="**\*.*" /> 
     <None Include="**\*.*" /> 
    </ItemGroup> 
    <Message Text="Content files: @(Content)" Importance="High" /> 
</Target> 

메시지는 콘텐츠 그룹이 비어 있지만 nuget pack 보이지 않는 것을 확인 걱정하다; 그것은 어쨌든 모든 파일을 여전히 포함합니다.

모든 것을 수동으로 표시 할 필요없이 누구나 패키지를 만들었습니까? Build Action : None OctoPack을 사용하지 않고?

답변

5

여전히 (OctoPack와 같은)이 토큰 교체 및 자동을 잃고 있지만, 당신이 원하는 동작을 얻을 수 있습니다 당신이 nuget pack MyProject.nuspec를 호출하면 (대신 nuget pack.csproj.nuspec 모두를 찾습니다하는) 것 같다 의존성. 따라서 완벽 솔루션이 아니며 --no-default-content과 같을 수 있지만 작업이 제대로 완료됩니다.

nuget pack MyProject.nuspec -Properties version={XYZ} (빌드 서버가 XYZ로 입력 한 경우) 버전 번호가 올바르게 증가하는지 확인할 수 있습니다. 예를 들어, .nuspec

<version>1.1.0.$version$</version>으로 설정하고 마지막 부분으로 SVN 수정 버전을 사용할 수 있습니다.

+0

"완벽한 해결책은 아니며, --no-default-content'와 같은 것이 될 것입니다. 더 완벽한 해결책은 이것을 제어하기 위해 .nuspec 파일에 무엇인가 쓸 수있게 해줍니다. 매번 어떤 매개 변수가 '너겟 (nuget)'에 전달 될지 기억할 것인가? – binki

+0

지속적인 통합 서버를 사용하는 사람은 누구도 기억할 필요가 없습니다. 이제 새로운 종속성을 추가하거나 종속성 버전을 변경하면 packages.config에서 해당 데이터를 읽을 수있는 대신 nuspec에 수동으로 추가해야한다는 것을 기억해야합니다. –

0

또 다른 솔루션 (이상적은 아니지만 적어도 .csproj 파일을 계속 전달하고 장점을 잃지는 않음)은 결과 .nupkg 파일의 내용 폴더를 삭제 (.zip 파일로 처리)하는 것입니다. 이 스크립트에 의해 사용 - - System.IO.Compression

Remove files from .zip file with Powershell

참고 만 PowerShell을 3.0 및 .NET 4.5와 함께 작동 :

이 작업을 수행하는 쉬운 방법은이 같은 스크립트를 통해입니다.

관련 문제