61

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

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

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

4

11 回答 11

46

以下步骤对我有用:

  1. 转到C:\Windows\System32\inetsrv并检查文件是否Microsoft.Web.Administration.dll存在。如果您缺少Microsoft.Web.Administration.dllin C:\Windows\System32\inetsrv,请在您的 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目标系统上的 。由于Microsoft.Web.Administration.dllWindows 系统之间可能不同,因此不建议应用程序提供此程序集文件的副本。副本可能与目标系统上的 IIS 不兼容。

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

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

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

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

于 2014-04-24T08:36:12.013 回答
13

您可以手动修改项目文件。添加/更改如下引用将在 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
于 2014-04-03T16:08:36.450 回答
6

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

项目的文件夹结构可以是

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

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

于 2013-08-07T13:11:29.030 回答
6
  1. 如果您项目文件,请将提示路径更改为<HintPath>%windir%\System32\inetsrv\Microsoft.Web.Administration.dll</HintPath>.
  2. 签入。然后,如果安装了 IIS,任何签出的人都应该看到正确的参考。如果未安装 IIS,则会出现他们需要解决的参考错误。

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

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

https://blog.lextudio.com/2015/05/whats-microsoft-web-administration-and-the-horrible-facts-you-should-know/

于 2015-05-30T03:46:26.443 回答
2

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

于 2014-06-09T21:16:21.033 回答
2

使用Nuget

Microsoft.Web.Administration

在此处输入图像描述

于 2015-08-19T16:22:25.610 回答
1

尝试确保通过 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.

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

于 2015-03-23T13:43:34.963 回答
1

您总是可以动态加载 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;
        }
    }
}

于 2020-03-06T14:27:47.753 回答
1

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

于 2016-10-05T16:55:37.003 回答
0

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

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

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

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

于 2014-07-29T13:46:56.577 回答
-4

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

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

于 2013-08-07T13:12:02.937 回答