【问题标题】:Proper way to include the Microsoft.Web.Administration assembly reference in VS 2010在 VS 2010 中包含 Microsoft.Web.Administration 程序集引用的正确方法
【发布时间】:2014-05-30 22:41:48
【问题描述】:

我遇到过这个问题earlier already。这次我将我的开发环境从一个桌面移动到另一个桌面,问题又回来了。请注意,要将我的解决方案从旧环境移动到新环境,我复制了它的整个解决方案文件夹。在新桌面打开时,使用相同版本的Visual Studio 2010,代码如下:

using (ServerManager serverManager = new ServerManager())
{
    //Go through all the sites
    for (int s = 0; s < serverManager.Sites.Count; s++) //EXCEPTION HERE!!!
    {
        //Do work
    }
}

产生了这个异常:

GetAdminSection; GetSectionInternal; SitesSectionCreator; Initialize;
SitesCollectionCreator; Initialize; collectData.
Filename: redirection.config 
Error: Cannot read configuration file

如果它在旧桌面上运行得非常好,为什么会这样做......无论如何,我的问题:

包含Microsoft.Web.Administration 程序集引用的正确方法是什么?

我目前的做法是通过Solution -> References -> Add reference -> Browser 链接到这个dll,然后指向这个文件:

C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll

我担心的是,当我的解决方案部署在生产机器上时,此异常会弹出。

【问题讨论】:

    标签: c# .net visual-studio-2010 iis


    【解决方案1】:

    是的,这是引用 Microsoft.Web.Administration 程序集的正确方式。 它仅适用于IIS 7.0 及更高版本。您是否安装了 IIS 功能(转到控制面板中的Turn Windows features on or off 向导)。

    http://www.iis.net/learn/manage/scripting/how-to-use-microsoftwebadministration

    这是我实例化 ServerManager 的方式,遇到了与您类似的问题:

    ServerManager iisManager = ServerManager.OpenRemote(Environment.MachineName.ToLower());
    

    【讨论】:

    • 是的,我在 Windows 8.1 上运行 IIS 8.5。我从 Windows 8 迁移它。这是唯一的区别。那为什么它会自己重置呢?
    • 您的代码以什么身份运行?我已经实现了使用 IIS 执行多项操作的 Web 安装程序应用程序,并添加了清单文件以使其需要管理访问 &lt;requestedExecutionLevel level="requireAdministrator" uiAccess="false" />`
    • 使用以下命令作为本地服务启动:"%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\installutil" myapp.exe
    • 尝试在NETWORK SERVICE下运行
    • 我无法将它作为网络服务运行。这将打开一个全新的蠕虫罐。
    【解决方案2】:

    使用此程序集的正确方法是在安装 IIS 后添加引用。所以你做的是对的。

    部署问题是不必要的,因为您始终可以创建部署包(例如 MSI),因此请确保将 IIS 设置为先决条件,并且在您的应用程序最终运行时存在预期的程序集。 (Microsoft 确实将此程序集注册到 GAC。)

    关于你需要收集更多信息的异常,

    1. 在运行时加载了 Microsoft.Web.Administration 的哪个副本? GAC 中可以有多个版本。
    2. redirection.config 文件是否包含正确的数据?文件权限是否正确?
    3. 如果您以管理员身份运行 Visual Studio,问题是否仍然存在?

    【讨论】:

    • 谢谢。发生异常时,有什么方法可以在运行时收集所有这些信息?
    • 当然,您可以在装有 IIS 的机器上测试您的应用程序,以查看异常来自何处。您应该能够正确处理它,因为它只是您可以尝试捕获的普通异常。
    • 嗯,我明白了。这就是我得到上面发布的异常描述的方式。我要问的是如何获得您在帖子中建议的信息?
    • 在 Visual Studio 中,您可以看到通过 Debug | 加载了哪些模块。模块面板。这可以帮助您检查步骤 1。当然您还需要在 VS 命令提示符下运行 gacutil -l Microsoft.Web.Administration 以查看注册版本。
    • 对不起。我没有在客户端机器上运行 VS 的奢侈。它必须通过 C# 和 .Net 功能收集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2017-12-12
    相关资源
    最近更新 更多