2012-03-23 19 views
7

ネイティブの依存関係を持つNugetパッケージを作成しています。 .nuspecファイルに追加のfileエントリを指定することで問題なくパッケージに入れます。Nuget Powershell:ネイティブ依存関係を追加するには?フォルダ内のプロジェクトにファイルを追加する方法は?

しかし、これらを私のパッケージを使用するプロジェクトの出力フォルダにコピーして、依存関係を実行時に見つけることもできます。

私の考えは、プロジェクトにネイティブの依存関係を追加し、BuildActionをに設定することです。これは私も以下のPowerShellスクリプトで管理しています:

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

Function add_file($file) 
{ 
    $do_add = 1 
    foreach($item in $project.DTE.ActiveSolutionProjects[0].ProjectItems) 
    { 
     if ($item -eq $file) 
     { $do_add = 0 } 
    } 
    if ($do_add -eq 1) 
    { 
     $added = $project.DTE.ItemOperations.AddExistingItem($file) 
     $added.Properties.Item("CopyToOutputDirectory").Value = 2 
     $added.Properties.Item("BuildAction").Value = 0   
    } 
} 
add_file(<dependency1>) 
add_file(<dependency2>) 
... 
add_file(<dependencyN>) 

これまでのところとても良いです。

しかし、私のプロジェクトはこれらの依存関係で完全に汚染されるようになりました。

PowerShellを使用してプロジェクトにファイルを追加してフォルダに入れる方法はありますか?
また、NuGetパッケージにネイティブ依存関係を追加し、それらをNuパッケージを使用してプロジェクトのbinフォルダに出力することもできます。

+0

更新:これまで、アセンブリリンクリソースとしてネイティブの依存関係を設定する代わりに、上記のソリューションから離れました。これにより、ネイティブの依存関係が自動的にコピーされます。設定アセンブリリンクリソースは、Visual StudioのC#プロジェクトではネイティブにサポートされていませんが、C++/CLIプロジェクト用です(このコンテキストでのみ使用しています)。 –

+0

私は同じ問題を抱えていますが、私は設定ファイルを追加する必要があります。この記事のタイトルは以下の解決策には関係ありませんtitel -.- '' –

答えて

7

SqlServerCompactパッケージは、ポストビルドイベントで関連するdllをbinフォルダにコピーして同様の処理を行いました。ここに関連するコード:

ファイル:install.ps1

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

. (Join-Path $toolsPath "GetSqlCEPostBuildCmd.ps1") 

# Get the current Post Build Event cmd 
$currentPostBuildCmd = $project.Properties.Item("PostBuildEvent").Value 

# Append our post build command if it's not already there 
if (!$currentPostBuildCmd.Contains($SqlCEPostBuildCmd)) { 
    $project.Properties.Item("PostBuildEvent").Value += $SqlCEPostBuildCmd 
} 

ファイル:GetSqlCEPostBuildCmd.ps1

$solutionDir = [System.IO.Path]::GetDirectoryName($dte.Solution.FullName) + "\" 
$path = $installPath.Replace($solutionDir, "`$(SolutionDir)") 

$NativeAssembliesDir = Join-Path $path "NativeBinaries" 
$x86 = $(Join-Path $NativeAssembliesDir "x86\*.*") 
$x64 = $(Join-Path $NativeAssembliesDir "amd64\*.*") 

$SqlCEPostBuildCmd = " 
if not exist `"`$(TargetDir)x86`" md `"`$(TargetDir)x86`" 
xcopy /s /y `"$x86`" `"`$(TargetDir)x86`" 
if not exist `"`$(TargetDir)amd64`" md `"`$(TargetDir)amd64`" 
xcopy /s /y `"$x64`" `"`$(TargetDir)amd64`"" 
+0

ありがとう、私はw/eの後に試してみます。 –

2

は、私はあなたがNuget Package ExplorerとしてSqlServerCompact Nugetパッケージの4.0.8852.1バージョンを開くことをお勧めしたいですこれをテンプレートとして使用します。それは私のために働いた。

+0

それ。そうだった。クール。 – JMarsch

関連する問題