我正在创建NuGet包,为此我创建了Nuspec清单文件。 content文件夹中,我有两个文件, test.exetest.config 现在,当任何用户安装此软件包时,我想将这些文件的“复制到输出目录”的属性更改为项目中的“始终复制”。

我发现相关问题NuGet如何将属性应用于文件 ,显示可以使用PowerShell install.ps1脚本执行此操作,但我不知道如何创建该文件。

===============>>#1 票数:38 已采纳

您的install.ps1文件应如下所示。

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

$file1 = $project.ProjectItems.Item("test.exe")
$file2 = $project.ProjectItems.Item("test.config")

# set 'Copy To Output Directory' to 'Copy if newer'
$copyToOutput1 = $file1.Properties.Item("CopyToOutputDirectory")
$copyToOutput1.Value = 2

$copyToOutput2 = $file2.Properties.Item("CopyToOutputDirectory")
$copyToOutput2.Value = 2

===============>>#2 票数:18

以下是有关如何端到端解决此问题的更多详细信息:

您需要做两件事来确保在安装时正确设置状态...

  1. 编写install.ps1脚本以标记文件的状态。
  2. 确保install.ps1脚本位于nuget包中的Tools目录中。

Install.ps1脚本

以下示例脚本将递归地将“Content”和“View”目录中的每个文件标记为“Copy to newer”。 请注意,编写此示例脚本是为了使其易于阅读和理解。 它将标记Visual Studios项目根目录中Content和Views文件夹中的每个文件。

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

function MarkDirectoryAsCopyToOutputRecursive($item)
{
    $item.ProjectItems | ForEach-Object { MarkFileASCopyToOutputDirectory($_) }
}

function MarkFileASCopyToOutputDirectory($item)
{
    Try
    {
        Write-Host Try set $item.Name
        $item.Properties.Item("CopyToOutputDirectory").Value = 2
    }
    Catch
    {
        Write-Host RecurseOn $item.Name
        MarkDirectoryAsCopyToOutputRecursive($item)
    }
}

#Now mark everything in the a directory as "Copy to newer"
MarkDirectoryAsCopyToOutputRecursive($project.ProjectItems.Item("Content"))
MarkDirectoryAsCopyToOutputRecursive($project.ProjectItems.Item("Views"))

复制到工具

必须将install.ps1文件复制到Tools目录才能由nu​​get执行脚本。 您可以将以下内容添加到nuspec模板中以执行此操作。

<files>
   <file src="install.ps1" target="Tools"/>
</files>

请注意,在这种情况下,我在Visual Studio项目的根目录中有install.ps1文件,并标记为“如果更新则复制”。

  ask by Arun Rana translate from so

未解决问题?本站智能推荐:

1回复

$ package和$ project params在NuGet install.ps1脚本中包含什么?

我正在为NuGet包编写我的第一个安装PowerShell脚本。 我正在尝试将lib文件夹中的文件复制到另一个NuGet包的tools文件夹中。 默认的install.ps1脚本有四个参数,其中两个是: $包 $项目 它们似乎是某种“对象”,但我不确定它们包含哪些属
6回复

MVC 3文件,新项目中的程序包管理器控制台中的NuGet错误

所以我安装了新的MVC3工具更新,并尝试创建一个新的MVC3 Web应用程序。 项目报告成功创建,但如果我打开包管理器控制台,我会看到以下内容...... 加载扩展类型数据文件时出现以下错误:,D:\\ Program Files(x86)\\ Microsoft Visual St
2回复

如何获得.net版本的子字符串,而不是直接在`Install.ps1`脚本中指向`net35`字符串?

我需要将NuGet程序包的每个程序集的CopyLocal设置为false 。 我在Install.ps1文件中执行此操作: 如何获取(目标项目的).net版本的子字符串 ,而不是直接在Install.ps1脚本中指向net35字符串?
2回复

如何在NuGet PowerShell安装中从项目中删除文件?

我试图在安装NuGet软件包的PowerShell期间从项目中删除文件。 我使用以下命令删除位于项目根目录的文件: 参数($ installPath,$ toolsPath,$ package,$ project) $ file1 = $ project.ProjectI
1回复

使用Init.ps1在csproj文件中添加项目

由于某些限制,我正在使用Nuget安装软件包,我必须在csproj文件中生成引用和程序集的路径。 我想使用Init.ps1文件来完成此操作, Init.ps1文件在您首次安装该软件包时Init.ps1运行。 我要添加的元素是类似的Reference元素。 并且应该像 某些机
1回复

使用NuGet / Powershell从项目中删除文件夹和文件

我想在NuGet包安装期间从我的项目中删除App_Start文件夹。 NuGet的文档在这里: http://nuget.codeplex.com/wikipage?title=Creating%20a%20Package 说: $ project.Object相当于ht
1回复

如何在NuGet PowerShell安装中从项目中删除和删除文件夹?

我正在尝试在安装NuGet软件包的PowerShell期间从项目中删除文件。 我有下面的代码将其从项目中删除,但是我无法弄清楚如何使用它,因此也可以从磁盘中删除它。 我该怎么做呢?
1回复

Uninstall.ps1的替代产品,因为它没有为nuget 3.x运行

在使用project.json的项目中,从NuGet 3.x开始,不会运行Install.ps1和Uninstall.ps1文件。 卸载软件包时,还有其他方法可以运行Powershell脚本吗?
1回复

在PowerShell中使用msbuild在NuGet中的安装事件上编辑csproj

在Clarius的Daniel Cazzulino的Blog上 ,我看到了一个很好的例子。 我想做些和他一样的事情。 我正在尝试通过NuGet交付一些基本的T4模板 ,并且有一个问题,因为每个模板在csproj文件中都有一个条目,内容为<Generator>TextTempl
1回复

nuget对文件名中的空格进行编码

我使用pack命令创建了一个nuget包: http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command 一切正常; 我遇到的唯一问题是我正在尝试通过PowerShell脚本安装证书这一事实。 此