创建nuget包失败,其中“路径不是合法形式”

时间:2013-06-12 13:30:34

标签: c# msbuild nuget

在后期构建步骤中,我们创建了nuget包。由于某些原因,这在我的机器上总是失败,而它在其他开发机器上工作。

执行的命令是:

nuget.exe  pack "$(ProjectPath)" -Properties Configuration=$(ConfigurationName) -OutputDir "$(ProjectDir)..\Apps"

我得到的输出是:

Packing files from ''.
Using 'Organisation.AppName.Modules.Kcs.nuspec' for metadata.
The path is not of a legal form.

对于其他开发人员,第一行包含该目录。在我的盒子上以不同的方式工作的原因是什么?我可以设置更改此行为的选项吗?

修改 我下载了nuget源代码,发现事情开始出错了。通过一个小测试程序,我可以模拟它:

using System;
using Microsoft.Build.Evaluation;

namespace CheckTarget
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("usage: CheckTarget projectfile.csproj");
                Console.WriteLine();
                return;
             }

             string path = args[0];
             var project = new Project(path);


             Console.WriteLine("TargetDir = {0}", project.GetProperty("TargetDir") != null ? project.GetProperty("TargetDir").EvaluatedValue : string.Empty);
             Console.WriteLine("TargetPath = {0}", project.GetProperty("TargetPath").EvaluatedValue);
             Console.ReadKey();
         }
     }
}

在我的机器上,targetdir为null,在另一台机器上,targetdir指向有效目录。

5 个答案:

答案 0 :(得分:3)

终于找到了答案。这个帖子帮我找到了问题: http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/d3c6e2de-1e87-49c2-b059-df074868e315/

在我的机器上有一个环境变量'platform',其值为'BWS'。删除它,事情正在发挥作用!

答案 1 :(得分:3)

在nuget程序中使用属性Platform to -Properties参数

-Properties Platform=$(Platform)

其中$(Platform)是您的项目平台之一(在csproj文件中定义,通常为x86,'任何CPU',..)。

即在你的情况下,运行类似:

nuget.exe pack "$(ProjectPath)" -Properties Configuration="$(ConfigurationName)" Platform="$(Platform)" -OutputDir "$(ProjectDir)..\Apps"

答案 2 :(得分:2)

我有同样的问题基本上这是我在源代码控制中携带的旧版nuget版本,我删除了.nuget文件夹然后我从visual studio中卸载了nuget,选择了

  

工具>扩展和扩展更新,

选择nuget&卸载,然后执行相同的过程,但对于安装它,只需确保您在"在线"库中。

答案 3 :(得分:0)

我必须从Updates And Extensions更新Nuget Manager。重新启动VS,它工作正常。

答案 4 :(得分:0)

对我来说,问题是没有.dll在Debug文件夹中,如果没有-properties Configuration=Release选项,nuget通常会尝试在Debug文件夹中找到一个dll。

手动运行nuget pack给了我一个有用的错误消息。将它作为构建后事件运行我得到了与您相同的模糊错误消息。