考えられる解決策は、Libフォルダーのコピーをアプリケーションと一緒に出荷することです。IronPythonライセンス(Microsoft Public License(Ms-PL))とPythonライセンス(Python License)の両方でこれが許可されると思います。
このプランのメリット:
アプリがLibフォルダーを見つけるのは簡単です。
処理するインストーラーが1つ少なくなるため、インストールが簡単になります。
インストーラーの合計サイズは小さくなります。
アプリが使用するIronPythonアセンブリがローカルにコピーされる場合は、Libもコピーするのが理にかなっています。これにより、プログラムファイルからのLibが使用された場合のように2つが同期しなくなります。
ライセンスは面倒な義務を課しているようには見えません。Ms-PLでは、ディストリビューションにMs-PLの完全なコピーを含める必要がありますが、それは大したことではありません。
編集:これがコードです
以下は私がしたことです。
Libフォルダーは、私の.csprojファイルのAfterBuildターゲットにコピーされます。組み込みのMSBuildcopyコマンドの使用方法を理解できませんでした。これは、MSBuildに関連するすべてが最大限の苦痛を伴うように設計されているため、代わりにrobocopyを使用しました。(robocopyはxcopyの代わりです。代わりにxcopyを使用できます)。
<Target Name="AfterBuild">
<Exec Command="robocopy $(ProjectDir)..\3rdParty\IronPython\IronPython2.0.2\Lib $(OutputPath)IronPython\Lib /E /XD .svn" IgnoreExitCode="true" />
<Exec Command="copy $(ProjectDir)..\3rdParty\IronPython\IronPython2.0.2\license.* $(OutputPath)IronPython\" />
</Target>
ライセンスファイルをコピーし(ライセンスの必要に応じて)、Subversionフォルダー(.svn)を除外します。
「3rdParty」フォルダーは、私のVisualStudioソリューションのルートレベルにあります。それは私がサードパーティのライブラリを保持する場所です。
<Exec>
robocopyの終了コードを処理できないため、robocopyの終了コードを無視します。これは理想的ではありませんが、次の行のプレーンコピーで問題が発生すると思います。
これは私がコードでLibパスを見つける方法です:
var assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var libPath = Path.Combine(assemblyPath, @"IronPython\Lib");
単体テストでLibをコピーするには、次のようにします。
[TestMethod()]
[DeploymentItem(@"3rdParty\IronPython\IronPython2.0.2\Lib", @"IronPython\Lib")]
public void MyTest()
{
// ...