【问题标题】:Why does MSBuild fail from the command line where VS2008 succeeds?为什么MSBuild从VS2008成功的命令行失败?
【发布时间】:2010-04-09 01:44:10
【问题描述】:

我有一个 ASP.NET 解决方案,可以在 VS2008 中很好地构建。

但是,当我这样做时它失败了:

MSBUILD.exe c:\path-to-sln 

失败并出现 CS0006 错误(“找不到元数据文件 'dll_name'”)。 当我尝试在解决方案中使用项目的 .csproj 时,它也会失败。

缺少 MSBuild 的 VS2008 做了什么?据我了解,VS 知道 MSBuild 无法了解的程序集间依赖关系。有什么方法可以通知 MSBuild?

(我需要 MSBuild 从命令行工作,因为我是从 CruiseControl.Net 中的 MSBuild-Task 调用它。)

提前致谢。 :3)

(我看过How to get cmd line build command for VS solution?,但还是不明白)

【问题讨论】:

    标签: asp.net visual-studio-2008 msbuild


    【解决方案1】:

    你必须先设置环境变量,msbuild 才能工作。您发布的问题链接实际上有答案(请参阅第一个答案条目)。

    您自动执行此操作的一种方法是选择您需要的 vcvars*.bat 文件,具体取决于您希望为其构建可执行文件的平台。例如,如果你想为 x86 构建,vcvarsall.bat 文件说你需要bin\vcvars32.bat。您可以复制此批处理文件,手动添加包含、lib 和 libpaths,并在批处理文件的 :end 部分添加构建步骤,如下所示:

    ...
    (batch file contents go here)
    :end
    MSBUILD.exe c:\path-to-sln 
    

    之后,您可以告诉任何您尝试构建的程序来运行您刚刚创建的批处理文件。

    【讨论】:

    • 感谢您的回答。不过,我不明白您回答的这一部分:“手动添加您的包含、lib 和 libpaths”。除了我的 sln 和 vcvars32.bat 的内容,我还需要什么?
    • 您必须添加您添加到 Visual Studio 目录的外部包含/库(如果有)。 vcvars*.bat 文件没有它们;您必须手动将它们添加到 bat 文件中。我认为在你的情况下你不需要添加任何东西,因为你需要的只是解决方案。
    • 我也有同样的问题。就像作者一样,我也需要从 CruiseControl.Net 中的 MSBuild 任务中执行此操作。对于创建自定义 .bat 文件,您的答案似乎是正确的,但我将如何从 CruiseControl.Net 的 MSBuild 任务中执行此操作?我想过创建自己的问题,但它与作者发布的问题完全相同。
    • 我自己不使用 CruiseControl.Net,但是当您将自定义 .bat 文件添加为可执行任务时它是否有效? igloocoder.net/ccnet/doc/CCNET/Executable%20Task.html
    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 2016-03-18
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多