我正在尝试创建我的第一个NuGet包。我不知道为什么我的install.ps1脚本没有被调用。这是目录结构
--Package
|
- MyPackage.nuspec
- tools
|
- Install.ps1
- some_xml_file
我使用此命令行构建包
nuget.exe pack MyPackage.nuspec
当我从VS Package Manager控制台安装包时,不会调用install.ps1。
我想也许我在剧本中遇到了一些错误,这就是我之所以注释掉所有内容的原因
param($installPath, $toolsPath, $package, $project)
"ECHO"
但我没有看到ECHO出现在Package Manager Console中。什么可能是错的?
答案 0 :(得分:15)
Install.ps
和/或\lib
文件夹中存在某些内容时才会调用 \content
,而不是“仅限工具”包。见here:
软件包必须在content或lib文件夹中包含要运行Install.ps1的文件。只是在tools文件夹中有一些东西不会启动它。
使用Init.ps1
代替(但是,每次打开解决方案时都会执行此操作)。
答案 1 :(得分:5)
Install.ps1
(和Uninstall.ps1
),但您可以使用Init.ps1
。见here:
修改了Powershell脚本支持,不再执行安装 并卸载脚本,但仍然执行init脚本。一些 这样做的原因是无法确定哪个包装 当没有直接引用所有包时,需要运行脚本 通过一个项目。
答案 2 :(得分:0)
安装脚本的替代方法有时可以是软件包目标文件。该目标文件会自动编织到项目文件(csproj等)中,并通过构建进行调用。
要允许Nuget找到目标文件并进行编织,必须执行以下两项操作:
<package-name>.targets
build
中如果您想将某些内容复制到输出文件夹(例如某些其他二进制文件,例如本机DLL),则可以将这些二进制文件放入文件夹binaries
下的程序包中,并在目标文件中使用此片段进行复制:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CopyBinaries" BeforeTargets="BeforeBuild">
<CreateItem Include="$(MSBuildThisFileDirectory)..\binaries\**\*.*">
<Output TaskParameter="Include" ItemName="PackageBinaries" />
</CreateItem>
<Copy SourceFiles="@(PackageBinaries)"
DestinationFolder="$(OutputPath)\%(RecursiveDir)"
SkipUnchangedFiles="true"
OverwriteReadOnlyFiles="true"
/>
</Target>
</Project>