2011-07-01 30 views
2

我完全被这个问题难住了。我有一个包含一些母版页的ASP.NET Web应用程序。今天早上,我添加了一个新的母版页,并将它连接到一个ASPX。不过,我不断收到一个YSOD与错误:母版页后面的代码不编译成汇编

Parser Error Message: Could not load type 'Blah.UI.Web.WebForms.Master.LoggedIn'. 

Source Error: 

Line 1: <%@ Master Language="C#" 
      MasterPageFile="~/WebForms/Master/IFrameContent.Master" 
      AutoEventWireup="true" CodeBehind="LoggedIn.master.cs" 
      Inherits="Blah.UI.Web.WebForms.Master.LoggedIn" %> 

起初,我以为我只是拼写错误的东西在母版页指令,但我已经检查和双重检查,并且似乎没有不是吧。

因为它说:“无法加载类型”我用DotPeak检查背后类的代码实际上已被编译成汇编,这是不存在的。原来的主页在那里,但我今天早上添加的那个不是。

所以,我计算过,我只是建错了不知何故(我已经尝试了完全重建已经......但我不妨再试一次)。仍然失踪。

我检查对先前版本中的csproj文件的源代码控制,我可以看到,新的代码有:

<Compile Include="WebForms\Master\LoggedIn.master.cs"> 
    <DependentUpon>LoggedIn.master</DependentUpon> 
    <SubType>ASPXCodeBehind</SubType> 
</Compile> 
<Compile Include="WebForms\Master\LoggedIn.master.designer.cs"> 
    <DependentUpon>LoggedIn.master</DependentUpon> 
</Compile> 

...后来又在同一个文件...

<ItemGroup> 
    <Content Include="WebForms\Master\LoggedIn.master" /> 
</ItemGroup> 

如果我看在Visual Studio中的属性的.cs文件说:

  • 生成操作:编译
  • 复制到输出目录:不要复制

这就像CS文件的主网页,这些网页的工作。

我现在完全难住了。我不知道为什么这不起作用,或者我错过了任何明显的事情。

UPDATE

我刚刚运行在使用我们的CI服务器使用相同的MSBUILD脚本,并产生不包含隐藏类新的主网页代码的程序集的命令行构建。因此,看起来似乎没有任何错误的项目文件。

我然后检查在Visual Studio输出的文件日期。 Web应用程序项目的程序集是两天前的,而其他程序集是最新的......我现在试图确定为什么Visual Studio没有正确构建特定的项目。感激地收到任何额外的检查内容。

更新2

Visual Studio是创建文件毕竟......它只是把它在错误的目录。在Web应用程序的项目下,它将bin中的一些项目文件和bin/x86/Debug中的一些项目文件放入。它也是从看起来像旧建立目录的文件复制文件,因为某些文件的文件日期不同。

我只能猜测问题的一部分可能与我分裂一些代码以试图清理代码库昨天有关。但我不明白它是如何输出的混合之间binbin/x86/Debug之间

+0

也许VS无法将新程序集复制到bin文件夹 - 检查输出窗口以查看文件是否被复制。你还应该在obj文件夹中检查程序集的日期。另一个问题可能是跳过网络项目的解决方案配置(输出窗口应该告诉你发生了什么)。 – VinayC

回答

4

看起来实际发生的事情(查看源代码管理历史记录)是有些项目的x86平台可用,其他项目没有。最近他们都得到了一个x86平台来保持一致。但是,该平台配置的输出路径并未在整个板上设置为相同,因此组件会以不同的目录结尾。

当我将平台设置回“Any CPU”时,它工作正常。我将不得不通过所有使输出路径一致的项目,以便所有程序集输出到正确的位置。

+0

谢谢。几乎你的场景的每个方面都适合我的问题,除非我在修改一个asmx时注意到它。只有当我注意到一个aspx未能编译(或者看起来如此)时,我扩大了搜索范围,发现了这一点。 –

1

>结束了起初,我以为我只是拼写错误的东西在母版页指令,但我已经检查和双检查,似乎并不是这样。

还检查了母版的命名空间?

CodeBehind="LoggedIn.master.cs"

它应该是CodeBehind="LoggedIn.Master.cs",用大写M?

+0

是的 - 拼写也正确。 :) –

+0

感谢您的建议。 –

1

新生成的master.cs文件的命名空间是否存在潜在的问题?如果母版页位于解决方案子文件夹中,则它将自动在生成的名称空间定义中包含文件夹名称。

在旁注中,是否有未来的格拉斯哥.net事件通过SDN整合在一起?

+0

命名空间似乎不是问题。查看上面的新更新。 –

+0

顺便说一下,目前还没有即将在格拉斯哥举行的基于.NET的苏格兰开发者活动。我们正在从八月起开始一些新的活动。但本月晚些时候我们会举行一次图书俱乐部会议:http://gla-book-club-july2011.eventbrite.com/请留意我们的网站http://scottishdevelopers.com或twitter stream @ScottishDevs获取更新信息: - ) –

+0

感谢您的建议。 –