2

我在使用 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'.

它会抛出一个未设置为对象实例的对象引用。例外。

不过顺便说一下,我的进程WorkingDirectory是C:\Project,所以文件路径就ok了。

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

如果我做:

cd ..

并运行:

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

我得到的对象引用未设置为对象的实例。例外。

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

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

2 回答 2

6

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

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

于 2012-06-21T06:28:08.780 回答
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>

它现在编译快乐。

于 2012-09-05T16:08:17.923 回答