Une solution possible serait d'expédier une copie du dossier Lib avec votre application. Je crois que la licence IronPython (Microsoft Public License (Ms-PL)) et la licence Python (Python License) le permettront.
Avantages pour ce plan:
Il sera facile pour l'application pour trouver le dossier Lib.
L'installation sera plus facile puisqu'il y aura un installateur de moins à traiter.
La taille totale de l'installateur sera plus petite. Si les assemblys IronPython que l'application utilise sont copiés localement, il est logique de copier aussi Lib, de sorte que les deux ne seront pas désynchronisés comme ils le feraient si le Lib de Program Files était utilisé.
Les licences ne semblent pas imposer d'obligations onéreuses. Le Ms-PL exige que vous incluiez une copie complète de la Ms-PL dans les distributions, mais ce n'est pas une grosse affaire.
Edit: Voici le code
Voici ce que je faisais.
Le dossier Lib est copié dans la cible AfterBuild de mon fichier .csproj. Je ne pouvais pas savoir comment utiliser la commande de copie MSBuild intégrée, car tout ce qui concerne MSBuild est conçu pour être extrêmement douloureux, j'ai donc utilisé robocopy à la place. (robocopy est le remplacement de xcopy, vous pouvez utiliser xcopy à la place).
<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>
Il copie les fichiers de licence (tel que requis par la licence) et exclut les dossiers de subversion (svn de).
Le dossier "3rdParty" se trouve au niveau racine de ma solution Visual Studio. C'est là que je garde les bibliothèques tierces.
J'ignore le code de sortie pour robocopy parce que <Exec>
ne peut pas traiter les codes de sortie de robocopy. Ce n'est pas idéal, mais je suppose que la copie simple dans la ligne suivante ramassera n'importe quels problèmes.
Voilà comment je trouve le chemin Lib dans le code:
var assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var libPath = Path.Combine(assemblyPath, @"IronPython\Lib");
Pour copier Lib dans un test unitaire, faire quelque chose comme ceci:
[TestMethod()]
[DeploymentItem(@"3rdParty\IronPython\IronPython2.0.2\Lib", @"IronPython\Lib")]
public void MyTest()
{
// ...
Suggérez-vous que l'OP change son code chaque fois que la version d'IronPython change? – Gabe