【问题标题】:Web Site project builds in VS2008 SP1 but not in MSBUILD through CruiseControl.net网站项目在 VS2008 SP1 中构建,但不是通过 CruiseControl.net 在 MSBUILD 中构建
【发布时间】:2010-11-25 08:45:25
【问题描述】:

我有一个想要使用 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 命名空间。

【问题讨论】:

    标签: asp.net msbuild namespaces controls


    【解决方案1】:

    您应该引用代码隐藏类而不是 ascx 生成的类。 ascx 类继承了您的代码隐藏类。所以在代码隐藏中定义你的 StarCount 属性,引用它,你应该没问题。

    【讨论】:

      【解决方案2】:

      显然,如果您从“浏览”选项卡引用了一个程序集,该程序集列在“添加引用”对话框的 .NET 选项卡中(不是 与 GAC 相同)并且在相同的安装位置,Visual Studio 将假定您要使用注册表来查找文件。我认为它将特定版本设置为 True,这是您在 IDE 中注意到它的唯一方法。这可以防止其他任何人编译它,即使他们在同一位置具有相同的 DLL,除非他们已经为该软件包运行了安装程序。

      当我将 Unity 应用程序块直接安装到 TFS 文件夹,然后将二进制文件添加到 TFS 时,这让我用 CruiseControl 咬了一口。 .csproj 文件没有用于引用的 HintPath 条目,因此构建服务器找不到 DLL。

      我最终使用“添加/删除程序”卸载了该块,然后再次从 TFS 获取二进制文件。删除并重新添加引用解决了问题。

      这可能与您的情况无关(我会先尝试 jrummell 的建议),但我想我会提到它。

      Visual Studio 倾向于假设它比开发人员更了解。一般不会。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-03
        相关资源
        最近更新 更多