Исправление файла WDP (проект веб-развертывания) - PullRequest
0 голосов
/ 26 мая 2020

У меня есть WDP (файл веб-развертывания), я не владелец этого файла, я не мог его изменить. Когда я пытаюсь развернуть его, я получаю следующую ошибку: enter image description here

Я предполагаю, что WDP - это только файлы ZIP, и их можно исправить. Я предполагаю, что параметр C:\\Users\\bverdonck\\AppData\\Local\\Temp\\scpkg-075568a7-663a-41c7-9d1a-e15cd3e25ada\\core.dacpac должен быть относительным путем core.dacpac. И это должно быть возможно изменить. Я разархивировал WDP и открыл архив. xml файл внутри него:

<sitemanifest MSDeploy.ObjectResolver.createApp="Microsoft.Web.Deployment.CreateApplicationObjectResolver" MSDeploy.ObjectResolver.dirPath="Microsoft.Web.Deployment.DirPathObjectResolver" MSDeploy.ObjectResolver.filePath="Microsoft.Web.Deployment.FilePathObjectResolver">
  <dbDacFx path="core.dacpac" databaseName="core.dacpac" MSDeploy.databaseName="1" MSDeploy.MSDeployLinkName="Child1" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="H4sIAAAAAAAEAE2Qy07DMBBFU2iMKtj0D/IBjZXESR9IXaBWbHh1UWCBN449gSgPW7YT6NeDI0XAjHTnaqTRuRpv4nnet6thDnV15uTtoeRaGllY/Ak5FqBqeWqgtYvgBbQpZbtd4RhHOFoEu662nYZtC53VrF4Ehy6vS34Hp6OsoN2SOC/IOlsyQZYpkMwfSMkf4NUB9r+Af/agZV8K0E/KOqCZDuHUuHtkDUwVsx9+65xBPas7MJMJQkN8dO7kQuR7xm+/0HBId9f02bjoNO9BC9nyit4otWeW0XvJWU2P0ChquKrewyKLXK8gZGlahGmSFeGaJHGYbwpCss0mEoRQLjVgwbhifOY7wgw5mfvjF+doNJc/qoTin2EBAAA=" MSDeploy.MSDeployObjectFlags="1" MSDeploy.MSDeployStreamRelativeFilePath="core.dacpac" />
  <dbDacFx path="master.dacpac" databaseName="master.dacpac" MSDeploy.databaseName="1" MSDeploy.MSDeployLinkName="Child2" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="H4sIAAAAAAAEAE2Q3UrDQBCFE21Wit70DfoATUi6SX+EXkhLb/zrRdULF2GyO9HQJLvsbqJ9et1AUWfgzGFg+A7j+Z7nfbvqZ19XZ05e70uupZGFjT4xjwSqSh5rbOxk/IzalLJZzaMkiqN4Ml63lW01rhpsrYZqMt61eVXyWzzu5QGbFU3ygi6yGQg6S5FmQU+a/gFeHGDzC/hnd1p2pUD9qKwDmkEfTp12D1DjQIH9CBrnDOmgatH4PiF9fHLu5ELkG+DbL9Ifvq2v2ZNx0VneoRay4Qd2o9QGLLA7yaFie6wVM1wd3sMii13PMYQ0LcJ0mhXhgk6TMF8WlGbLZSwoZTUYizoSwBXwYeAYQ+JkFJz+OCInc/kD98qxnWMBAAA=" MSDeploy.MSDeployObjectFlags="1" MSDeploy.MSDeployStreamRelativeFilePath="master.dacpac" />
  <dbDacFx path="web.dacpac" databaseName="web.dacpac" MSDeploy.databaseName="1" MSDeploy.MSDeployLinkName="Child3" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="H4sIAAAAAAAEAE2Q3U6DQBCFQcuaRm/6BjxAIcBCW0y4MG288a8XVS+6N8syKOFnN7sL2qfXxRB1JjlzMsnkOxnLtizry9Q4x7o6M3J8qJjkipfa/4DcL0A0/NRCp5fuC0hV8S5b+6Ef+MHS3faN7iVkHfRa0mbp7vu8qdgdnA68hi7DYV7iTbKiBV7FgBNnJEV/gFcD2P0C/tm95ENVgHwS2gDVbAwnpt0jbWEmqH53OuMUGmjTg7JthMb46NzIRZHvKLv9ROPhcXtNnpWJTvIBZME7VpMbIXZUU3LPGW3IAVpBFBP1m1cmgek1eDSOSy+OktLb4Cj08rTEOEnToMCY/PyFMkHZ3DGAOTKycKYnLtBkLr8BR1ZHe2ABAAA=" MSDeploy.MSDeployObjectFlags="1" MSDeploy.MSDeployStreamRelativeFilePath="web.dacpac" />
  <iisApp path="Website" MSDeploy.path="2" MSDeploy.MSDeployLinkName="Child4" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="H4sIAAAAAAAEAE2Qy26DMBBFoQ2WonaTP+ADABEMSajEokp2fWWRPqR6Y2BoLR62bEOVr29tCbWdka6vbI3P1Tiu4zjfpuxp6/rCyPsDqyRXvNHRF5RRDaLj5x4GHfgvIBXjQ7GN1lEcxYG/Hzs9SigGGLWkXeAfx7Jj1R2cT7yFocDrssG7bENrvEkBZ54lJX+AVwM4/AL+2aPkE6tBPgltgGphw4n57pH2sBBUf3qDcQpNtBtBuS5CNj66tMKYuhUC2bm3/Q15ViY5KSeQNR+qlpi3A9WU3POKduQEvSCqEu1H2GSx6S2ENE2bME2yJtzhZB2WeYNxludxjTExqRXTsPTM70tkZOXNC1yh2Vz9ABeVxyFcAQAA">
    <createApp path="Website" MSDeploy.path="2" isDest="AA==" MSDeploy.isDest.Type="Microsoft.Web.Deployment.DeploymentObjectBooleanAttributeValue" managedRuntimeVersion="" MSDeploy.managedRuntimeVersion="2" enable32BitAppOnWin64="" MSDeploy.enable32BitAppOnWin64="2" managedPipelineMode="" MSDeploy.managedPipelineMode="2" applicationPool="" MSDeploy.applicationPool="1" appExists="True" MSDeploy.appExists="1" MSDeploy.MSDeployLinkName="createApp" MSDeploy.MSDeployKeyAttributeName="path" />
    <contentPath path="Website" MSDeploy.path="2" MSDeploy.MSDeployLinkName="contentPath" MSDeploy.MSDeployKeyAttributeName="path" MSDeploy.MSDeployProviderOptions="H4sIAAAAAAAEAE2Qy2rDMBBF7TYWhHSTP/AHxMax7DwKWZRk11cW6QOqjWyPWmNFEpKckK9vJTBtZ+DqIqQ5lwnCIAi+XfnT182Vk4/HttbSSGbTM1RpA4rLyxGEncWvoE0rxWaZztMszWbxtue217AR0FtN+Sze9xVv63u4HGQHYoPnFcOrckEbvCgAl5En5X+ANwfY/QL+2b2Wp7YB/aysA5qRD6eGuyd6hJGi9isSzhl0orwHE4YI+fjo2smklsL6Me4V8p/ft7fkxbj4pDqBbqSoO3Kn1I5aSh5kTTk5wFERU6vuM2Fl5noJCS0KlhR5yZIVzudJtWYYl+t11mBMXHTTWhhHbvoYOZlGwxanaDCTHyiltjBhAQAA">
      <MSDeploy.dirPath path="Website" MSDeploy.MSDeployLinkName="contentPath" />
    </contentPath>
  </iisApp>
</sitemanifest>

Параметр, который меня интересует, присутствует в свойстве MSDeploy.MSDeployProviderOptions:

H4sIAAAAAAAEAE2Qy07DMBBFU2iMKtj0D/IBjZXESR9IXaBWbHh1UWCBN449gSgPW7YT6NeDI0XAjHTnaqTRuRpv4nnet6thDnV15uTtoeRaGllY/Ak5FqBqeWqgtYvgBbQpZbtd4RhHOFoEu662nYZtC53VrF4Ehy6vS34Hp6OsoN2SOC/IOlsyQZYpkMwfSMkf4NUB9r+Af/agZV8K0E/KOqCZDuHUuHtkDUwVsx9+65xBPas7MJMJQkN8dO7kQuR7xm+/0HBId9f02bjoNO9BC9nyit4otWeW0XvJWU2P0ChquKrewyKLXK8gZGlahGmSFeGaJHGYbwpCss0mEoRQLjVgwbhifOY7wgw5mfvjF+doNJc/qoTin2EBAAA=

Он декодирован. Но это заархивированная строка, и должна быть возможность распаковать ее и получить саму строку. Однако мне не удалось должным образом преобразовать его в строку (я перепробовал всю кодировку, доступную в. Net Framework (Encoding.GetEncodings())).

Лучшее, что у меня есть, это

\0\u0001\0\0\0????\u0001\0\0\0\0\0\0\0\f\u0002\0\0\0[Microsoft.web.deployment, Version=7.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\u0005\u0001\0\0\02Microsoft.Web.Deployment.DeploymentProviderOptions\u0004\0\0\0\fproviderName\u0004path\u0005names\u0006values\u0001\u0001\u0006\u0006\u0002\0\0\0\u0006\u0003\0\0\0\adbDacFx\u0006\u0004\0\0\0\\C:\\Users\\bverdonck\\AppData\\Local\\Temp\\scpkg-075568a7-663a-41c7-9d1a-e15cd3e25ada\\core.dacpac\t\u0005\0\0\0\t\u0006\0\0\0\u0011\u0005\0\0\0\0\0\0\0\u0011\u0006\0\0\0\0\0\0\0\v"

Мой код:

        var base64 =
            "H4sIAAAAAAAEAE2QT0+DQBDFQcuaRi/9Bv0AQKAUqCYcTJte/NdD1YN7GXanSqDsZndB++l1SYj6Dm9eJpn8XsZxHcf5thrmoKsza28PFVNCi4MJP7EMOcpGnI7YGn/+gkpXoi3yMA6jMPLn664xncKixc4oaPz5riubit3haS9qbIskLg/JKs2AJ9kSk9QbSIs/wKsFbH4B/+JOib7iqJ6ksUA9GcrJcfcIR5xIMB9ea5MmPTQdatclZKhPzq1d8HIDbPtFhkO6vqHP2lanZY+Ki5bV9FbKDRig94JBQ/d4lFQzWb8HUZ6m2QryIMsSCJYxy4NrHkOAccp4gosUOFAmFIYcmAQ29SxhSqzNvPGLMzKGyx8g432UYQEAAA==";
        var s = Decompressor.UnzipMS(Convert.FromBase64String(base64));
        var array = s.ToArray();
        foreach (var encodingInfo in Encoding.GetEncodings())
        {
            var x = encodingInfo.GetEncoding().GetString(array);

            System.Console.WriteLine(encodingInfo.CodePage);
            System.Console.WriteLine(x);
        }

Декомпрессор:

public class Decompressor
{
    public static void CopyTo(Stream src, Stream dest)
    {
        byte[] bytes = new byte[4096];

        int cnt;

        while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0)
        {
            dest.Write(bytes, 0, cnt);
        }
    }


    public static MemoryStream UnzipMS(byte[] bytes)
    {
        using (var msi = new MemoryStream(bytes))
        using (var mso = new MemoryStream())
        {
            using (var gs = new GZipStream(msi, CompressionMode.Decompress))
            {
                //gs.CopyTo(mso);
                CopyTo(gs, mso);
            }

            return mso;
        }
    }
}

И вот вот застрял. Мне нужно правильно разархивировать его, затем изменить параметр, затем снова заархивировать, затем обновить архив. xml, затем изменить этот файл в WDP, затем попытаться развернуть пакет. Но, возможно, я смотрю не в том направлении, и есть лучший способ решить эту проблему.

Основной вопрос: как переопределить некоторые параметры, встроенные в файл WDP?

И текущая проблема, с которой я столкнулся : Как правильно декодировать параметр MSDeploy.MSDeployProviderOptions в архиве. xml внутри файла WDP?

...