How to reference Microsoft.Web.Administration?
The Microsoft.Web.Administration assembly is found in C:\Windows\System32\inetsrv
on my machine. I believe it is installed as part of IIS. The assembly is also in the GAC.
How should I reference this assembly from my project, given that I want to commit the project to SVN for others to checkout. Microsoft.Web.Administration
does not appear in the Visual Studio 'Add References' list. I can add a reference to C:\Windows\System32\inetsrv\Microsoft.Web.Administration
, but this seems like a bad idea as other developers might have it installed on a different path or drive.
Or I could copy it into the project folder, but then I have to commit the binary to SVN.
Solution 1:
The following steps are working for me:
- Go to
C:\Windows\System32\inetsrv
and check if the fileMicrosoft.Web.Administration.dll
exists. If you are missing theMicrosoft.Web.Administration.dll
inC:\Windows\System32\inetsrv
, enable IIS Management Console in your Windows Features:
- In your Visual Studio project, add the reference to the
Microsoft.Web.Administration.dll
: - Now your .proj-file has the following the entry:
<HintPath>C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll</HintPath>
. You could adapt this path to e.g.<HintPath>%windir%\System32\inetsrv\Microsoft.Web.Administration.dll</HintPath>
to make it more robust.
When you move the app to a different system, the app also references to the Microsoft.Web.Administration.dll
on the target system. Because the Microsoft.Web.Administration.dll
could be different between the windows systems it is not recommended to deliver a copy of this assembly file by the app. A copy could be incompatible with the IIS on the target system.
It is also not recommended to reference a copy of the assembly on the same system, because perhaps the Microsoft.Web.Administrator.dll
and the IIS will change due an Windows Update! Then your referenced copy of Microsoft.Web.Administrator.dll
is incompatible with the updated IIS.
When the Microsoft.Web.Administrator.dll is missing on the target system, then activate the Management Console as descibed in step 1 above. Alternatively you can use the cmd (open as Administrator) and activate the Windows Feature Management Console by DISM.exe
via the following command:
C:\Windows\System32\Dism.exe /enable-feature /online /featurename:IIS-ManagementConsole
This command could be useful when you want to distribute your app via an setup.
Solution 2:
You may modify your project file manually. Adding/Changing the reference like below will find the assembly in GAC regardless of its location:
<Reference Include="Microsoft.Web.Administration, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
Of course, if the feature "IIS management console" is installed only. You may simply leave a hint in code:
#warning Windows feature "IIS management console" must be installed locally
Solution 3:
Search for it in NuGet and install it. It will get installed in packages folder, change the location according to your project structure and re-add the references to reflect new path. Generally I create a lib folder and place all the external libraries.
Folder structure of the project can be
lib -> external libraries
src - > code
tools -> tools such as nant, etc
Microsoft.Web.Administration
is used to manage IIS programmatically and it is not available from add reference window. By adding reference from C:\Windows\System32\inetsrv would create reference issues. So, better to have it in lib folder internal to the project and check it in SVN.
Solution 4:
- If you project file, change the hint path to
<HintPath>%windir%\System32\inetsrv\Microsoft.Web.Administration.dll</HintPath>
. - Check in. Then anyone who checks out should see the proper reference if IIS is installed. If IIS is not installed, there will be a reference error they need to resolve.
To resolve, they either install IIS via Programs in Control Panel or via command line as @DzmitryLahoda pointed out.
Again, any trick pointing you to the NuGet packages is improper,
https://blog.lextudio.com/2015/05/whats-microsoft-web-administration-and-the-horrible-facts-you-should-know/