繁体   English   中英

如何引用 Microsoft.Web.Administration?

[英]How to reference Microsoft.Web.Administration?

Microsoft.Web.Administration 程序集位于我机器上的C:\Windows\System32\inetsrv中。 我相信它是作为 IIS 的一部分安装的。 该程序集也在 GAC 中。

鉴于我想将项目提交给 SVN 以供其他人签出,我应该如何从我的项目中引用这个程序集。 Microsoft.Web.Administration未出现在 Visual Studio 的“添加引用”列表中。 我可以添加对C:\Windows\System32\inetsrv\Microsoft.Web.Administration的引用,但这似乎是个坏主意,因为其他开发人员可能将它安装在不同的路径或驱动器上。

或者我可以将它复制到项目文件夹中,但是我必须将二进制文件提交给 SVN。

以下步骤对我有用:

  1. 转到C:\Windows\System32\inetsrv并检查文件Microsoft.Web.Administration.dll是否存在。 如果您在C:\Windows\System32\inetsrv中缺少Microsoft.Web.Administration.dll ,请在 Windows 功能中启用 IIS 管理控制台:

将管理服务添加到 Windows 功能

  1. 在您的 Visual Studio 项目中,添加对Microsoft.Web.Administration.dll的引用: 在此处输入图像描述
  2. 现在您的 .proj 文件具有以下条目: <HintPath>C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll</HintPath> 您可以将此路径调整为例如<HintPath>%windir%\System32\inetsrv\Microsoft.Web.Administration.dll</HintPath>以使其更加健壮。

当您将应用程序移至其他系统时,该应用程序还会引用目标系统上的Microsoft.Web.Administration.dll 由于 Windows 系统之间的Microsoft.Web.Administration.dll可能不同,因此不建议应用程序提供此程序集文件的副本。 副本可能与目标系统上的 IIS 不兼容。

也不建议在同一系统上引用程序集的副本,因为Microsoft.Web.Administrator.dll和 IIS 可能会因 Windows 更新而改变! 那么您引用的Microsoft.Web.Administrator.dll副本与更新后的 IIS 不兼容。

当目标系统上缺少 Microsoft.Web.Administrator.dll 时,请按照上述步骤 1 中的说明激活管理控制台。 或者,您可以使用 cmd(以管理员身份打开)并通过DISM.exe通过以下命令激活 Windows 功能管理控制台:

C:\Windows\System32\Dism.exe /enable-feature /online /featurename:IIS-ManagementConsole

当您想通过设置分发应用程序时,此命令可能很有用。

您可以手动修改项目文件。 添加/更改如下引用将在 GAC 中找到程序集,无论其位置如何:

<Reference Include="Microsoft.Web.Administration, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
</Reference>

当然,如果仅安装了“IIS 管理控制台”功能。 您可以简单地在代码中留下提示:

#warning Windows feature "IIS management console" must be installed locally
  1. 如果您项目文件,请将提示路径更改为<HintPath>$(windir)\System32\inetsrv\Microsoft.Web.Administration.dll</HintPath>
  2. 签入。然后,如果安装了 IIS,任何签出的人都应该看到正确的参考。 如果未安装 IIS,则会出现他们需要解决的参考错误。

为了解决这个问题,他们要么通过控制面板中的程序安装 IIS,要么通过@DzmitryLahoda 指出的命令行安装 IIS。

同样,任何指向 NuGet 包的技巧都是不恰当的,

https://halfblood.pro/whats-microsoft-web-administration-and-the-horrible-facts-you-should-know-b82f2c974da6

在 NuGet 中搜索并安装它。 它将安装在包文件夹中,根据您的项目结构更改位置并重新添加引用以反映新路径。 通常我会创建一个 lib 文件夹并放置所有外部库。

项目的文件夹结构可以是

lib -> external libraries
src - > code
tools -> tools such as nant, etc

Microsoft.Web.Administration用于以编程方式管理 IIS,它在添加参考窗口中不可用。 通过从 C:\Windows\System32\inetsrv 添加引用会产生引用问题。 因此,最好将它放在项目内部的 lib 文件夹中并在 SVN 中检查它。

C:\Windows\System32\inetsrv

或者

C:\Windows\winsxs\x86_microsoft.web.administration-nonmsil_31bf3856ad364e35_6.1.7600.16385_none_c8472944f22a9c81

C:\Windows\WinSxS\x86_microsoft.web.administration-nonmsil_31bf3856ad364e35_6.3.9600.16384_none_5d1097a8ac709c4e

使用Nuget

Microsoft.Web.Administration

在此处输入图像描述

尝试确保通过 prebuild 事件安装这些程序集:

Dism /online /Enable-Feature /FeatureName:IIS-WebServerManagementTools /All

以这种方式安装了具有所有功能的整个 IIS,因此使用的FeatureName是对程序集的猜测。 尝试下一步列出所有替代功能:

dism /online /Get-Features

DISM适用于 Windows 8 之前的版本: To service inbox drivers in an offline image of Windows Vista with Service Pack 2 (SP2) or Windows Server 2008 with SP2, you must use the Windows 7 version of DISM or PkgMgr. The Windows 7 version of DISM is available in Windows 7 and Windows PE 3.0 operating systems, or can be installed with the Windows Automated Installation Kit (Windows AIK) or the Windows OEM Preinstallation Kit (Windows OPK) for Windows 7. To service inbox drivers in an offline image of Windows Vista with Service Pack 2 (SP2) or Windows Server 2008 with SP2, you must use the Windows 7 version of DISM or PkgMgr. The Windows 7 version of DISM is available in Windows 7 and Windows PE 3.0 operating systems, or can be installed with the Windows Automated Installation Kit (Windows AIK) or the Windows OEM Preinstallation Kit (Windows OPK) for Windows 7.

也可以尝试 Windows 7 及以下版本: start /w pkgmgr /iu:IIS-WebServerManagementTools

一些额外的信息,而不是直接的答案。 IIS 和 IIS Express 使用同一个 DLL 的两个不同版本,因此您的应用程序可能会意外获取错误的版本。 请参阅http://rdingwall.com/2013/09/22/microsoft-web-administration-confusion/

您总是可以动态加载 dll,而永远不要在项目中直接引用它。 这样您就可以避免所有“引用”问题、NuGet 包等。 但是,您仍然需要验证 dll 在最终目标上是否可用。

var windowsPath = Environment.GetFolderPath(Environment.SpecialFolder.Windows);

var DLL = Assembly.LoadFile($@"{windowsPath}\System32\inetsrv\Microsoft.Web.Administration.dll");

if (DLL != null)
{
    // Get Server...
    foreach (Type type in DLL.GetExportedTypes())
    {
        if (type.Name == "ServerManager")
        {
            dynamic server = Activator.CreateInstance(type);
            dynamic applicationPools = server.ApplicationPools;
            foreach (dynamic pool in applicationPools)
            {
                MessageBox.Show(pool.Name);
            }

            // Done -- Get Out...
            break;
        }
    }
}

执行此操作的最简单方法是从此链接在 Visual Studio 中安装 NuGet。 http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c

然后,在 Visual Studio 中,转到工具-> NuGet 包管理器-> 包管理器控制台

然后,选择默认项目作为您要安装到的项目。

最后,运行Install-Package Microsoft.Web.Administration命令。

将名为“引用程序集”的新项目添加到您的解决方案中,并将 DLL 添加到该项目中 - 这样 DLL 将位于源代码管理中。 然后,您可以使用添加引用中的“浏览”选项来引用该项目。

您的同事会很高兴,因为他们不会错过源代码控制中的这个 DLL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM