我想要使用CruiseControl.net构建一个网站项目。
在一个页面上有一个嵌套在转发器控件中的用户控件,我需要在ItemDataBound事件处理程序中获得对该用户控件的强类型引用:
ASP.usercontrols_stars_ascx stars = (ASP.usercontrols_stars_ascx)e.Row.FindControl("stars");
stars.StarCount = Convert.ToInt32(drv["rating"]);
这在VS2008中工作正常但在MSBUILD中出现以下错误:
w:\CCNet\InflatableBoats\Working\IBWeb\UserControls\DisplayReviews.ascx.cs (49,):
errorCS0234:命名空间“ASP”中不存在类型或命名空间名称“usercontrols_stars_ascx”(您是否缺少程序集引用?)
我认为它可能是命名空间问题,因为MSBUILD似乎不能识别网站项目用于用户控件和页面的ASP命名空间。
答案 0 :(得分:0)
您应该引用codebehind类而不是ascx生成的类。 ascx类继承了您的codebehind类。所以在代码隐藏中定义你的StarCount属性,引用它,你应该没问题。
答案 1 :(得分:0)
显然,如果您引用“添加引用”对话框中<.NET> 中列出的 >与GAC相同)并且在同一安装位置,Visual Studio将假定您要使用注册表来查找文件。我认为它将特定版本设置为True,这是您在IDE中注意到它的唯一方法。这可以防止其他任何人编译它,即使它们在同一位置具有相同的DLL,除非它们运行该包的安装程序。
当我将Unity应用程序块直接安装到TFS文件夹,然后将二进制文件添加到TFS时,这一点我使用CruiseControl。 .csproj文件没有引用的HintPath条目,因此构建服务器找不到DLL。
我最终使用“添加/删除程序”卸载了该块,然后从TFS再次获取二进制文件。删除和重新添加引用可以解决问题。
这可能与你的情况无关(我先试试jrummell的建议),但我想我会提到它。
Visual Studio倾向于认为它比开发人员更了解。一般情况下它没有。