2013-03-18 118 views
2

我制作了一个包含原生DLL的本地软件包。该软件包就像SqlServerCompact.4.0.8852.1.nupkg通过nuget命令行执行powershell脚本

当我通过GUI'Manage Nuget Packages ...'安装包时,一切正常,本机DLL被复制到Debug/Release文件夹。复制本机Dll由类似于SqlSerCompact中的脚本完成。

而且我有以下.bat文件自动的MyProject包装过程:

..\..\tools\nuget\bin\NuGet.exe install MyProject\packages.config -o packages\ 
..\..\tools\nuget\bin\NuGet.exe install MyProjectTest\packages.config -o packages\ 
..\..\tools\nuget\bin\nuget update MyProject.sln 
msbuild /m /p:Configuration=Release /p:Platform="x64" MyProject.sln 
..\..\tools\nuget\bin\nuget pack MyProject.nuspec 

上述脚本运行完全得到MyProject.nupkg(编译只需要净的DLL)。然而,nuget install不会执行依赖包中的副本脚本 - 因此编译MyProjectTest是好的,但是在执行它的EXE时,它的Debug/Release文件夹中没有本地DLL。

我的问题是为什么从命令行安装包时powershell脚本没有执行?以及如何处理它?谢谢!

回答

7

它不受NuGet.exe支持。关于这一点有一个discussion on codeplex,还有一些问题已经关闭,这些问题在他们的问题跟踪系统中提出。关于支持此功能的问题,还有一个blog post by David Ebbo

一般问题是,在PowerShell脚本中,您可以使用Visual Studio对象模型,以便能够从Visual Studio外部公开这一点,并且支持所有场景都是非平凡的。

我看着支持running of PowerShell scripts from outside Visual Studio by using SharpDevelop作为一个实验,看看有什么可能的。这是一个相当重量级的解决方案,因为它需要SharpDevelop才能工作,而不仅仅是NuGet.exe。