3

我正在尝试在没有在机器上安装 Visual Studio 或 MVC 4 的情况下在测试服务器上构建 MVC 解决方案。

该解决方案将所有必需的 MVC 程序集称为 nuget 包。在项目中,所有 MVC 程序集都标记为本地复制。当然,在我的开发机器上,该解决方案在 Visual Studio 中构建得很好。

在构建机器上,我安装了 .net sdk,我正在尝试使用 MSBuild 构建解决方案。所有 nuget 包都受源代码控制,当我在服务器上进行 SVN 更新时,它会获取所有包。

当我运行构建时,我得到了对 MVC DLL 的损坏引用。我不明白为什么会发生这种情况,因为在解决方案中引用了 DLL 并且存在供构建使用。

这是 MSBuild 返回的错误示例...

DataAnnotations\RunDataAnnotationsFromModelPropertyAttribute.cs(5,18): error CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)
DataAnnotations\RunDataAnnotationsFromModelPropertyAttribute.cs(12,93): error CS0246: The type or namespace name 'IClientValidatable' could not be found (are you missing a using directive or an assembly reference?)
Security\MyAuthenticateAttribute.cs(6,18): error CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)
Security\MyAuthenticateAttribute.cs(12,48): error CS0246: The type or namespace name 'AuthorizeAttribute' could not be found (are you missing a using directive or an assembly reference?)
Security\MyAuthorizeAttribute.cs(5,18): error CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)
Security\MyAuthorizeAttribute.cs(13,45): error CS0246: The type or namespace name 'AuthorizeAttribute' could not be found (are you missing a using directive or an assembly reference?)
Web\Mvc\MyLoginController.cs(7,18): error CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)
Web\Mvc\MyLoginController.cs(44,62): error CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?) ...

我花了几个小时在这上面。令我沮丧的是,它是在我的机器上的 Visual Studio 中构建的,而不是在使用 msbuild 的服务器上构建的。

赛斯

4

3 回答 3

5

右键单击项目并单击“卸载”,然后再次单击“编辑”。

找到<Reference>for System.Web.Mvc。如果<HintPath>没有引用“包”目录(或丢失),那就是你的问题。只需删除包和所有引用并重新开始。

NuGet 包还原仅还原磁盘上的文件,它不会更新项目引用。

于 2012-10-06T00:18:24.910 回答
1

“复制本地”只是意味着它将从您的 MVC3 安装中复制尚未安装在远程计算机上的程序集。

您是否尝试将 MVC dll 复制到项目中的文件夹(您提交到 VCS 存储库)并从那里引用所有这些,而不是从默认安装目录?那应该工作得很好。

于 2012-10-05T21:03:10.373 回答
0

在运行 msbuild 命令之前尝试在解决方案上运行 nuget install?如果您运行的是 VS2010 或更高版本,并且已将 nuget 扩展更新到最新版本,则“项目”菜单上有一个“启用 Nuget 包还原”选项。这会将您的解决方案和项目文件配置为在构建过程中运行 nuget install。

于 2012-10-06T05:50:57.103 回答