2017-10-31 19 views
0

소스 코드 파일을 설치 한 Visual Studio 프로젝트에 넣는 Nuget 패키지를 만들고 싶다고합시다. 음 꽤 the "content"-approach와 함께 잘 작동합니다. 내가 자동으로 파일 시스템과뿐만 아니라 VS-프로젝트에 추가하려면 다음과 같은 폴더 구조에서 이러한 파일을 가져올 수 있음을 의미Nuget 소스 코드 패키지를위한 프로젝트 언어 구별

이 같은 패키지와

.\ThePackage.nuspec 
    └ content\TheFile.cs 
    └ content\TheOtherFile.cs 

, Nuget가 자동으로 추가됩니다 소스 코드 파일을 프로젝트에 직접. 그러나 그것은 모두 파일이므로, 그 조건부를 만들 수있는 방법이 없습니다.

"왜?" 당신은 물어볼 수 있습니다 - 글쎄, 난 실제로 두 cs 파일을 가지고 있지 않습니다. 하나는 C# 용이고 다른 하나는 Visual Basic 용으로 여러 언어로 동일한 작업을 수행합니다. 그래서 C#과 Visual Basic 프로젝트 파일을 구별해야합니다. 이 같은 구조 위의 콘텐츠 접근 ...

.\ThePackage.nuspec 
    └ content\TheFile.cs 
    └ content\TheFile.vb 

은 ... 물론 cs와 혼합하고 각 프로젝트의 vb 파일을 발생합니다.

난 그냥 C# 프로젝트에서 cs 파일 ThePackage for C#ThePackage for VB 같은 두 Nuget 패키지를 제공 할 필요없이 Visual Basic 프로젝트의 vb 파일이하려는 Nuget을 알 수있는 방법이 있습니까?

+0

설치시 실행되는 너겟 패키지에 init.ps1 파일을 추가 할 수 있습니다. 거기에 어떤 언어가 프로젝트 등에서 사용되는 언어를 감지하고 원하지 않는 파일을 제거/추가 할 수 있습니다. –

+1

해결했습니다. 답변으로 게시하면 몇 가지 포인트를 줄 수 있습니다. – Waescher

답변

1

설치시 실행되는 너겟 패키지에 init.ps1 파일을 추가 할 수 있습니다. 거기에 어떤 언어가 프로젝트 등에서 사용되는 감지와 같은 일부 논리를 배치하고 원치 않는 또는 원하는 파일을 제거/추가

+1

몇 가지 소스 코드를 제공하기 위해 내 자신의 답변을 추가했습니다 (댓글에 너무 적습니다). 다시 한번 감사드립니다. – Waescher

1

솔루션을 검색하는 모든 방문자에게. @ D.J.에 의해 제안 된 powershell 접근 방식으로, 나는 아래 스크립트로 끝났다. 이와

content\XXXXXX.cs 
content\XXXXXX.vb 

, 모두 Nuget 설치 얻을 (파일 시스템과 VS 프로젝트) :


nuget 패키지는 두 개의 콘텐츠 파일이 있습니다.

이후에 다음 스크립트를 실행하여 사용하지 않은 파일을 다시 삭제합니다.

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


# All XXXXXX code files (for C# and VB) have been added by nuget because they are ContentFiles. 
# Now, try to detect the project language and remove the unnecessary file after the installation. 


function RemoveUnnecessaryCodeFile($project) 
{ 
    $projectFullName = $project.FullName 
    $codeFile = "" 
    $removeCodeFile = "" 

    if ($projectFullName -like "*.csproj*") 
    { 
     $codeFile = "XXXXXX.cs" 
     $removeCodeFile = "XXXXXX.vb" 
     Write-Host "Identified as C# project, installing '$codeFile'" 
    } 

    if ($projectFullName -like "*.vbproj*") 
    { 
     $codeFile = "XXXXXX.vb" 
     $removeCodeFile = "XXXXXX.cs" 
     Write-Host "Identified as VB project, installing '$codeFile'" 
    } 

    if ($removeCodeFile -eq "") 
    { 
     Write-Host "Could not find a supported project file (*.csproj, *.vbproj). You will get both code files and have to clean up manually. Sorry :(" 
    } 
    else 
    { 
     # Delete the unnecessary code file (like *.vb for C# projects) 
     # Remove() would only remove it from the VS project, whereas 
     # Delete() additionally deletes it from disk as well 
     $project.ProjectItems.Item($removeCodeFile).Delete() 
    } 
} 

RemoveUnnecessaryCodeFile -Project ($project)