IISアプリケーションの作成を自動化しようとしていますが、これはライブラリMicrosoft.Web.Administrationを使用しています。ここで私が使用しているコードの一部です:Microsoft.Web.Administrationライブラリを使用してIISアプリケーションを作成すると、2つのアプリケーションが1つではなく2つ作成されます
IISHelper.cs
public static void CreateApplicationPool(string applicationPoolName)
{
using (ServerManager serverManager = new ServerManager())
{
if (serverManager.ApplicationPools[applicationPoolName] != null)
return;
ApplicationPool newPool = serverManager.ApplicationPools.Add(applicationPoolName);
newPool.ManagedRuntimeVersion = "v4.0";
serverManager.CommitChanges();
}
}
public static void CreateSite(string siteName, string path)
{
using (ServerManager serverManager = new ServerManager())
{
var sites = serverManager.Sites;
if (sites[siteName] == null)
{
sites.Add(siteName, "http", "*:80:", path);
serverManager.CommitChanges();
}
}
}
public static void CreateApplication(string siteName, string applicationName, string path)
{
using (ServerManager serverManager = new ServerManager())
{
var site = GetSite(serverManager, siteName);
var applications = site.Applications;
if (applications["/" + applicationName] == null)
{
applications.Add("/" + applicationName, path);
serverManager.CommitChanges();
}
}
}
public static void CreateVirtualDirectory(string siteName, string applicationName, string virtualDirectoryName, string path)
{
using (ServerManager serverManager = new ServerManager())
{
var application = GetApplication(serverManager, siteName, applicationName);
application.VirtualDirectories.Add("/" + virtualDirectoryName, path);
serverManager.CommitChanges();
}
}
public static void SetApplicationApplicationPool(string siteName, string applicationPoolName)
{
using (ServerManager serverManager = new ServerManager())
{
var site = GetSite(serverManager, siteName);
if (site != null)
{
foreach (Application app in site.Applications)
{
app.ApplicationPoolName = applicationPoolName;
}
}
serverManager.CommitChanges();
}
}
そして、ここでは、この実行後に述べたIISHelperクラス
string siteName = "TestSite";
string applicationName = "TestApp";
string virtualDirectoryName = "TestVirtualDirectory";
string applicationPoolName = "TestAppPool";
string physicalPath = @"C:\inetpub\mynewsite";
IISHelper.CreateApplicationPool(applicationPoolName);
IISHelper.CreateSite(siteName, physicalPath);
IISHelper.CreateApplication(siteName, applicationName, physicalPath);
IISHelper.CreateVirtualDirectory(siteName, applicationName, virtualDirectoryName, physicalPath);
IISHelper.SetApplicationApplicationPool(siteName, applicationPoolName);
上からメソッドを呼び出す主なコードがありますコード私は正常にサイトとIISの下に適切なアプリケーションプールでアプリケーションを作成していますが、私はそこに2つのアプリケーションが表示されている新しく作成されたアプリケーションプールのメニューで "アプリケーションの表示"を選択しているとき、 eアプリケーションが1つだけでなければなりません。私は2つのアプリケーションの作成を避けるためにこれに取り組んでいますが、方法を見つけることはできません。ここではその例を示す画像れる:なぜ、上記のコードを実行した後、二つのアプリケーションが作成され、どのようにその問題を回避するためにコードを変更する:
だからここは私の質問ですか?
GetSite&GetApplicationはどこで参照されていますか? – thestar
public static Site GetSite(ServerManager serverManager、string siteName) { return serverManager.Sites.FirstOrDefault(x => x.Name == siteName); }プライベート静的アプリケーションGetApplication( ServerManagerのServerManagerの、 ストリングサイト名、 ストリングのapplicationName) {戻りserverManager.Sites .FirstOrDefault(X => x.Name ==サイト名の)?。アプリケーション .FirstOrDefault(X => x.Path == "/" + applicationName); } –