iis7+的虚拟目录:未能加载程序集“**”。请确保在访问该页之前已经编译了此程序集_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > iis7+的虚拟目录:未能加载程序集“**”。请确保在访问该页之前已经编译了此程序集

iis7+的虚拟目录:未能加载程序集“**”。请确保在访问该页之前已经编译了此程序集

 2014/10/26 21:14:31  蹦极的馒头  程序员俱乐部  我要评论(0)
  • 摘要:在使用win8系统后,突然想运行iis,于是在windows组件中启用iis,并aspnet_regiis.exe-i注册iis后,于是开始发布了一个站点,一切正常继而,在该站点下添加虚拟目录,然后预览虚拟目录的网页,就会立刻报类似“未能加载程序集“App_Web_utohcdb4”。请确保在访问该页之前已经编译了此程序集。”的错误我纳闷了,我记得在以前版本的iis上建立一个虚拟目录是何其的简单并且不会出错,搜索后发现,原来右击网站
  • 标签:程序 iiS 目录 编译 IIS7

在使用win8系统后,突然想运行iis,于是在windows组件中启用iis,并aspnet_regiis.exe -i注册iis后,于是开始发布了一个站点,一切正常

继而,在该站点下添加虚拟目录,然后预览虚拟目录的网页,就会立刻报类似“未能加载程序集“App_Web_utohcdb4”。请确保在访问该页之前已经编译了此程序集。”的错误

我纳闷了,我记得在以前版本的iis上建立一个虚拟目录是何其的简单并且不会出错,搜索后发现,原来右击网站,有了两个选下个“添加应用程序”和“添加虚拟目录”

继续搜了下两者异同  (源自:http://blog.csdn.net/xiaoqijun/article/details/16523811)

A.虚拟目录     虚拟目录是指在站点下建立一个虚拟子目录,指定一个固定的物理路径做为站点的应用路径。     1. 虚拟目录与父级站点共用一个应用程序池     例如:站点TestWeb(c:\Inetpub\wwwroot\ TestWeb)下建立了SubTestA(D:\SubTestA)的虚拟目录         若TestWeb为设定了Framework V2.0,则SubTestA也必须是Framework V2.0的应用程序,否则将给带来Framework不匹配的各种错误。     2. 虚拟目录必须将可执行文件(dll等)放置在父级站点的bin目录下。     3. 虚拟目录中的web.config文件继承父级站点的web.config.         就是说如果父级站点声明过的引用,在虚拟目录下的web.config中不应重复声明     4. 虚拟目录中的应用其根目录为父级站点的根目录         5. 虚拟目录中的AppSetting.config设置应使用相对路径来进行引用。 B. 应用程序     应用程序是指在父级目录下建立了一个单独的应用程序,独享应用程序池     1. 应用程序可以与父级站点拥有不同的应用程序池         即可以达到TestWeb为Framework V2.0,而SubTestA可以是Framework V4.0,二者互不影响     2. SubTestA的可执行文件独立的放置在根目录下的bin中,不能放置在WebTest的bin目录中     3. SubTestA的web.config独立于WebTest的web.config     4. SubTestA中的应用其根目录为父级站点的根目录     5. 虚拟目录中的AppSetting.config设置应使用相对路径来进行引用。   应用程序是建立在虚拟目录的基础之上,而应用程序独立于父级站点拥有独立的程序运行机制,这让同一站点拥有了运行不同框架集而不相互影响的能力 实际运用中需要根据不同的情况来选择虚拟目录或应用程序     考虑到我只是需要某网站的一个映射网址,两个发布文件没有任何关系,也不想公用任何config或者dll文件 于是还是老实的“添加应用程序”来解决问题吧 于是,我还是不甘心,去iis网站配置文件applicationHost.config(C:\Windows\System32\inetsrv\config)中查看到部分内容 (publish和test2.0是添加的虚拟目录,test2.0_是添加的应用程序)对应配置如下: <sites>
            <site name="Default Web Site" id="1">
                <application path="/">
                    <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:80:" />
                </bindings>
            </site>
            <site name="test1.0" id="2" serverAutoStart="true">
                <application path="/" applicationPool="test1.0">
                    <virtualDirectory path="/test2.0" physicalPath="F:\asp.net\test 2.0\publish2.0" />
                    <virtualDirectory path="/publish" physicalPath="F:\asp.net\html5拖拽上传\test\publish" />
                </application>
                <application path="/test2.0_" applicationPool="test1.0">
                    <virtualDirectory path="/" physicalPath="F:\asp.net\test 2.0\publish2.0" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="192.168.1.107:8080:" />
                </bindings>
            </site>
            <siteDefaults>
                <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" />
                <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" />
            </siteDefaults>
            <applicationDefaults applicationPool="DefaultAppPool" />
            <virtualDirectoryDefaults allowSubDirConfig="true" />
        </sites>  很清楚的看到,site(站点),application(应用程序),virtualDirectory(虚拟目录)的层次关系,并可以说明为: 一个site中可以有一个或者多个application,一个application中可以有一个或者多个virtual directory,而一个virtual directory则对应着一个物理路径。一个site默认会至少有一个application,称为根应用程序(root application)或者默认应用程序(default application),而一个application至少有一个vitual director,称为根虚拟目录(root virtual directory)   也许在早版本的iis中,例如iis6,应用程序和虚拟目录是没有太大严格区分的,在IIS7以上,这三者则被规范化起来,在IIS架构层面上明确了三者的层次关系。具体可以参考: http://www.cr173.com/html/18969_1.html 所以添加应用程序,本质上还是为其配置一个虚拟目录,根据path和 physicalPath很清楚的知道,iis是如何帮我们映射物理路径的              
发表评论
用户名: 匿名