nuget pack引发一个未设置为对象实例的Object引用。例外

时间:2012-04-20 13:12:10

标签: command-line nuget nuget-package

我在使用nuget.exe命令行工具时遇到了一个奇怪的问题。

我有一个控制台应用程序,它启动一个执行nuget命令行工具的进程。

这是输出:

nuget.exe pack Project.csproj -Prop Configuration=Release 
Attempting to build package from 'Project.csproj'. Packing files from
'C:\Project\bin\Release'.

它抛出一个未设置为对象实例的Object引用。异常。

但顺便说一下,我的进程WorkingDirectory是C:\ Project,所以文件路径没问题。

奇怪的是,当我使用标准的Windows命令行,cd进入.csproj文件夹并执行相同的命令时,正在创建nupkg文件。

如果我这样做:

cd ..

并运行:

nuget.exe pack Project\Project.csproj -Prop Configuration=Release

我将Object引用设置为未设置为对象的实例。异常。

我的控制台应用程序代码是:

var process = new Process  {
    StartInfo = new ProcessStartInfo("nuget.exe", 
                                     "pack Project.csproj -Prop Configuration=Release")
                    {
                        WorkingDirectory = "C:\\Project",
                        UseShellExecute = false,
                        RedirectStandardInput = true,
                    }
};

2 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,我的问题是在更新软件包(以及SVN中的合并)之后,packages.config文件仍然引用了包的两个版本:旧包和新包。使用旧包删除文件夹后,“对象引用未设置为对象的实例。” - 弹出错误。

因此,要解决该错误,请确保您的packages.config文件中只包含一个版本的包。

答案 1 :(得分:1)

我认为发生此空引用错误是因为您的packages.config具有您不再拥有的程序集的条目。

例如,我的packages.config就像这样。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="H.Common" version="1.0.0.9" targetFramework="net35" />
  <package id="H.Common" version="1.0.0.10" targetFramework="net35" />
  <package id="H.Validation" version="3.0.0.50" targetFramework="net35" />
</packages>

并且nuget pack引发了一个错误,因为配置引用了ghost程序集。 我删除了该行,现在配置变成了这样。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="H.Common" version="1.0.0.10" targetFramework="net35" />
  <package id="H.Validation" version="3.0.0.50" targetFramework="net35" />
</packages>

现在编译很开心。