Как добавить записи в конфигурацию виртуального каталога IIS - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь добавить некоторые пользовательские свойства в конфигурацию виртуального каталога в IIS, но когда я фиксирую изменения, я получаю исключение DirectoryNotFoundException

Я пробовал несколько способов сделать это, в большинстве случаев что-то вроде этого

var config = serverManager.GetWebConfiguration(serverManager.Sites[0].Name, "mycustomfolder");
var appSettings = config .GetSection("appSettings");
var collection = section.GetCollection();
var elem = conf.CreateElement("add");
elem.SetAttributeValue("key", "createdBy");
elem.SetAttributeValue("value", "me");

serverManager.CommitChanges();

Объект диспетчера сервера четко определен с

using(var serverManager = new ServerManager())
...

То, что я ожидал, будет примерно таким внутри конфигурации:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
    </system.webServer>
    <appSettings>
        <clear />
        <add key="createdBy" value="me" />
    </appSettings>
</configuration>

Вместо этого я получаю ошибку

System.IO.DirectoryNotFoundException: Filename: \\?\C:\inetpub\wwwroot\local\web.config
Error: Cannot write configuration file

   at Microsoft.Web.Administration.Interop.IAppHostWritableAdminManager.CommitChanges()
   at Microsoft.Web.Administration.ConfigurationManager.CommitChanges()
   at Microsoft.Web.Administration.ServerManager.CommitChanges()

Следуя пути, по которому он пытается сохранить, я не вижу подпапки для своих виртуальных каталогов, но я могу создавать их даже программно

1 Ответ

0 голосов
/ 24 июня 2019

Согласно вашему описанию, я думаю, вы могли использовать неправильное имя сайта. Я также создал тестовую демонстрацию на моей стороне, она работает хорошо. Я предлагаю вам попробовать использовать имя сайта напрямую.

Подробности, вы можете обратиться к ниже кодов:

    protected void Button1_Click(object sender, EventArgs e)
    {
        using (var serverManager = new ServerManager())
        {
            var config = serverManager.GetWebConfiguration("WebForm48", "mycustomfolder");
            var appSettings = config.GetSection("appSettings");
            var collection = appSettings.GetCollection();
            var elem = collection.CreateElement("add");
            elem.SetAttributeValue("key", "createdBy");
            elem.SetAttributeValue("value", "me");
            collection.Add(elem);
            serverManager.CommitChanges();
        }        
    }

Моя консоль IIS:

enter image description here

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...