.net - MSBuild 失败,但在 Visual Studio 中构建工作正常

标签 .net asp.net msbuild

C#、.NET 2.0

我在一个解决方案中有一个 ASP.NET 网站,还有 2 个其他项目(用作库引用)。当我在 Visual Studio 中构建(调试或发布)时,一切正常。但是,使用 MSBuild 构建失败。

这个构建曾经一直在工作(它实际上是通过 nAnt 任务调用的)。唯一改变的是我有一个新的用户控件,我在后面的代码中引用了它的类型。

有问题的代码在我的 ASPX 代码后面。 MessageAlert 是用户控件:

MessageAlert userControl = this.LoadControl("~/UserControls/MessageAlert.ascx") as MessageAlert;
        userControl.UserMessage = message;
        this.UserMessages.Controls.Add(userControl);

为了让 Visual Studio 识别“MessageAlert”类型,我必须:

1) 在用户控件顶部的@Control 标记中设置 ClassName="MessageAlert"(因为使用自动生成的 UserControls_MessageAlert 也不起作用)

2) 使用@Register 在我的 ASPX 标记中注册用户控件

3) 在我后面的代码顶部添加一个“using ASP”

完成这些步骤后,我可以从 visual studio 在我的代码隐藏中成功引用 MessageAlert 类型。但是从 MSBuild 我得到“找不到类型或 namespace 名称‘MessageAlert’(您是否缺少 using 指令或程序集引用?)”

MSBuild 执行非常简单 - 它指向同一个解决方案文件并将配置属性设置为发布。

根据我在 Visual Studio 中获取对 MessageAlert 的类型引用所必须执行的步骤数,似乎在 MSBuild 过程中缺少某些东西。但是什么? Visual Studio 实际上不会在幕后调用 MSBuild 吗?

有没有更好的方法在 ASPX 的代码中引用 UserControl 类型?

编辑:澄清一下,MessageAlert 用户控件在其他引用的程序集/项目中。我提到它们是因为与网站一起组成了解决方案文件,该文件与 MS Build 正在构建的 sln 文件相同。

最佳答案

我也遇到了你上面描述的这个问题。

我不知道为什么会这样,作为最后的措施,我决定尝试以下方法并取得成功。

更改用户控件的类名 - 实际类名而不是 aspx 文件中的类名。

因此在您的示例中将类名更改为 MessageAlert(来自 UserControls_MessageAlert),同时在 aspx 的继承中更改此名称

希望这对某人有帮助

关于.net - MSBuild 失败,但在 Visual Studio 中构建工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/885334/

相关文章:

c# - Web Api 的 Azure AD 应用程序角色

visual-studio - FxCop 构建 (Visual Studio 2008 Professional)

c# - Microsoft.TeamTest.targets 中的 MSBuild NullReferenceException

.net - 找不到类型[WinSCP.EnumerateOptions]

C# - dll 引用如何工作?

c# - 如何在 DNN 中获取特定的用户信息

c# - .net C#,保护每种方法的最佳实践是什么?

ubuntu - 在 Ubuntu 16.04 上使用 Mono 5.0 构建 MonoDevelop v7.0.0

.net - 查询事件目录以获取 .NET 中的用户角色

.net - 什么是对象图以及如何序列化对象图