2017-10-31 15 views
0

ソースコードファイルがインストールされたVisual Studioプロジェクトに配置するNugetパッケージをビルドしたいとしましょう。よく、これはthe "content"-approachでかなりうまくいく。私も自動的にファイルシステムとVS-プロジェクトに追加するには、以下のフォルダ構造でこれらのファイルをもたらすことができることを意味しNugetソースコードパッケージのプロジェクト言語を区別する

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

このようなパッケージでは、Nugetが自動的に追加されますソースコードファイルを直接プロジェクトに追加します。しかし、それはの両方のファイルがあるので、私はそれを条件付きにする方法は見つけませんでした。

「なぜですか?」あなたが尋ねるかもしれません - 私は実際には2つの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のような2つのNugetパッケージを提供する必要なく、Visual Basicのプロジェクトで vbファイルを持ちたいというNugetを伝える方法はありますか?

+0

インストール時に実行されるnugetパッケージにinit.ps1ファイルを追加できます。そこでは、プロジェクトなどで使用されている言語を検出し、不要なファイルを削除/追加するようなロジックを配置することができます。 –

+1

私はそれを解決しました。これを回答として投稿すると、いくつかの点を挙げることができます。 – Waescher

答えて

1

インストール時に実行されるnugetパッケージにinit.ps1ファイルを追加できます。そこで、プロジェクトなどで使用されている言語を検出し、不要なファイルや不要なファイルを削除/追加するようなロジックを配置することができます。

+1

私は自分の答えをいくつかのソースコードを提供するために追加しました(コメントには小さすぎます)。再度、感謝します。 – Waescher

1

解決策を探しているすべての訪問客。 @DJ。によって提案されたpowershellのアプローチで、私は以下のスクリプトで終わった。これにより

content\XXXXXX.cs 
content\XXXXXX.vb 

、両方がNugetによってインストールされます(ファイルシステムとVSプロジェクトへ):


nugetパッケージには、2つのコンテンツファイルがあります。

その後、次のスクリプトを実行して、未使用のファイルを再度削除します。

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) 
関連する問題