Web Config Transform ไม่ทำงาน


88

ในแอปพลิเคชัน. NET MVC 3.0 ฉันมีการกำหนดค่าต่อไปนี้ในappSettings:

web.config

<appSettings>
<add key="SMTPHost" value="mail.domain.com"/>
    <add key="SMTPUsername" value="user@gmail.com"/>
    <add key="SMTPPort" value="25"/>
    <add key="SMTPPwd" value="mypassword"/>
    <add key="EmailFrom" value="notific@gmail.com"/>
</appSettings>

สำหรับการดีบักฉันได้กำหนดการแปลงการกำหนดค่าต่อไปนี้:

web.Debug.config

<appSettings>
    <add  key="SMTPPort" value="58" xdt:Transform="Replace" xdt:Locator="Match(key)" />
</appSettings>

และฉันเรียกใช้โปรแกรมประยุกต์ในโหมดการแก้ปัญหา แต่ SMTP พอร์ตของฉันจะยังคงได้รับความคุ้มค่าจากไม่web.configweb.Debug.config

ใครช่วยแนะนำสิ่งที่อาจผิดพลาดในการกำหนดค่านี้ได้บ้าง

คำตอบ:


158

การแปลง Web.config ใช้เป็นส่วนหนึ่งของการดำเนินการเผยแพร่เท่านั้น

หากคุณต้องการให้ทำสิ่งนี้เป็นส่วนหนึ่งของการapp.configดำเนินการสร้างคุณสามารถใช้ปลั๊กอิน SlowCheetah - XML ​​Transforms Visual Studio:

http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5


1
ขอบคุณมากที่ช่วยฉันได้มาก
HaBo

3
ว้าวฉันใช้เวลา 2 ชั่วโมงในการค้นหาคำตอบนี้ ขอบคุณที่โพสต์ฉันจะดึงผมออก
Peanut

ดูเหมือนว่าใน Visual Studio 2015 (Web) การแปลง. configจะเป็นฟีเจอร์ในตัวดังนั้นคุณไม่จำเป็นต้องใช้ SlowCheetah อีกต่อไป แต่การแปลงในตัวจะมีผลเฉพาะเมื่อคุณเผยแพร่แอปพลิเคชันไม่ใช่ในกรณีที่คุณเรียกใช้ คุณสามารถดูที่นี่ว่าฉันจะแก้ไขมัน
Matt

1
ไม่แน่ใจว่าทำไมต้องใช้สิ่งนี้ในขณะที่คำตอบของ @ komsky เป็นวิธีที่ง่ายและสะอาด
Csaba Toth

2
SlowCheetah นั้นยอดเยี่ยมมาก แต่จากเอกสารของพวกเขาเอง: "สำหรับโปรเจ็กต์เว็บไฟล์จะถูกเปลี่ยนเมื่อคุณเผยแพร่หรือรวมแอปพลิเคชันของคุณ" กล่าวอีกนัยหนึ่งไม่ใช่ในขณะที่ดีบัก
Doug

33

Visual Studio (2010 - 2019)ไม่น่าเสียดายที่ไม่ได้สนับสนุนโดยตรงขณะที่คุณกำลังแก้ไขข้อบกพร่องได้มีไว้เพียงสำหรับการเผยแพร่ - แม้จะมีการขยาย SlowCheetah (คำตอบที่ถูกทำเครื่องหมาย) มันไม่ทำงานสำหรับฉัน (เฉพาะโครงการที่ใช้ app.config มากกว่า web.config)

หมายเหตุว่ามีวิธีแก้ปัญหาที่ อธิบายไว้ที่ codeproject

อธิบายวิธีการแก้ไขไฟล์. msproj เพื่อเขียนทับ web.config ปัจจุบันด้วยเวอร์ชันที่แปลงแล้ว

ก่อนอื่นฉันจะอธิบายวิธีแก้ปัญหานั้นว่าเป็นตัวเลือกที่ 1แต่เมื่อเร็ว ๆ นี้ฉันได้ค้นพบตัวเลือกอื่นที่2ซึ่งใช้งานง่ายกว่า (ดังนั้นคุณสามารถเลื่อนลงไปที่ตัวเลือก 2 ได้โดยตรงหากต้องการ):


ตัวเลือกที่ 1:ฉันได้เพิ่มคำแนะนำที่นำมาจากบทความ codeprojectดั้งเดิม(ดูลิงก์ด้านบน) เนื่องจากภาพหน้าจอนั้นหายไปแล้วและฉันไม่ต้องการสูญเสียข้อมูลทั้งหมด:

VS.Net ไม่ทำการเปลี่ยนแปลงใด ๆ เมื่อคุณกำลังพัฒนาและเพียงแค่ดีบักสภาพแวดล้อมในพื้นที่ของคุณ แต่มีบางขั้นตอนที่คุณสามารถทำได้เพื่อให้สิ่งนี้เกิดขึ้นหากคุณต้องการ

  • ขั้นแรกให้สร้างการกำหนดค่าที่คุณต้องการในVS.Netโดยสมมติว่าการดีบักเริ่มต้นและรีลีสไม่เพียงพอสำหรับสิ่งที่คุณพยายามทำ
  • คลิกขวาที่คุณweb.configและเลือกเพิ่มการแปลงการกำหนดค่า - สิ่งนี้จะสร้างการกำหนดค่าการแปลงขึ้นอยู่กับการกำหนดค่าของคุณที่กำหนดไว้
  • ตอนนี้คุณสามารถเปลี่ยนชื่อของคุณจะweb.configweb.base.config
  • เพิ่มweb.configในโครงการของคุณ ไม่สำคัญว่าจะมีอะไรอยู่ในนั้นเพราะจะถูกเขียนทับทุกครั้งที่เราสร้าง แต่เราต้องการให้เป็นส่วนหนึ่งของโครงการดังนั้นVS.Netจึงไม่ให้ป๊อปอัป"โครงการของคุณไม่ได้กำหนดค่าสำหรับการแก้จุดบกพร่อง"ขึ้น.
  • แก้ไข.csprojไฟล์โครงการของคุณและเพิ่มTransformXmlงานต่อไปนี้ในเป้าหมาย AfterBuild ที่นี่คุณจะเห็นว่าฉันจะเปลี่ยนweb.base.configไฟล์โดยใช้ไฟล์web.[configuration].configและจะบันทึกเป็นweb.configไฟล์. สำหรับรายละเอียดโปรดตรวจสอบนี้ไมโครซอฟท์ Q & A และสำหรับคำแนะนำวิธีการที่จะขยายการสร้างให้ดูมี

ทางเลือกที่ 2:

จากคำตอบนี้ฉันได้พัฒนาแอปคอนโซลอย่างง่าย TransformConfig.exe (ในไวยากรณ์ C # 6.0):

using System;
using System.Linq;
using Microsoft.Web.XmlTransform;

namespace TransformConfig
{

  class Program
  {
    static int Main(string[] args)
    {
        var myDocumentsFolder = $@"C:\Users\{Environment.UserName}\Documents";
        var myVsProjects = $@"{myDocumentsFolder}\Visual Studio 2015\Projects";

        string srcConfigFileName = "Web.config";
        string tgtConfigFileName = srcConfigFileName;
        string transformFileName = "Web.Debug.config";
        string basePath = myVsProjects + @"\";
        try
        {

            var numArgs = args?.Count() ?? 0;
            if (numArgs == 0 || args.Any(x=>x=="/?"))
            {
                Console.WriteLine("\nTransformConfig - Usage:");
                Console.WriteLine("\tTransformConfig.exe /d:tgtConfigFileName [/t:transformFileName [/s:srcConfigFileName][/b:basePath]]");
                Console.WriteLine($"\nIf 'basePath' is just a directory name, '{basePath}' is preceeded.");
                Console.WriteLine("\nTransformConfig - Example (inside PostBuild event):");
                Console.WriteLine("\t\"c:\\Tools\\TransformConfig.exe\"  /d:Web.config /t:Web.$(ConfigurationName).config /s:Web.Template.config /b:\"$(ProjectDir)\\\"");
                Environment.ExitCode = 1;
                return 1;
            }

            foreach (var a in args)
            {
                var param = a.Trim().Substring(3).TrimStart();
                switch (a.TrimStart().Substring(0,2).ToLowerInvariant())
                {
                    case "/d":
                        tgtConfigFileName = param ?? tgtConfigFileName;
                        break;
                    case "/t":
                        transformFileName = param ?? transformFileName;
                        break;
                    case "/b":
                        var isPath = (param ?? "").Contains("\\");
                        basePath = (isPath == false)
                                    ? $@"{myVsProjects}\" + param ?? ""
                                    : param;
                        break;
                    case "/s":
                        srcConfigFileName = param ?? srcConfigFileName;
                        break;
                    default:
                        break;
                }
            }
            basePath = System.IO.Path.GetFullPath(basePath);
            if (!basePath.EndsWith("\\")) basePath += "\\";
            if (tgtConfigFileName != srcConfigFileName)
            {
                System.IO.File.Copy(basePath + srcConfigFileName,
                                     basePath + tgtConfigFileName, true);
            }
            TransformConfig(basePath + tgtConfigFileName, basePath + transformFileName);
            Console.WriteLine($"TransformConfig - transformed '{basePath + tgtConfigFileName}' successfully using '{transformFileName}'.");
            Environment.ExitCode = 0;
            return 0;
        }
        catch (Exception ex)
        {
            var msg = $"{ex.Message}\nParameters:\n/d:{tgtConfigFileName}\n/t:{transformFileName}\n/s:{srcConfigFileName}\n/b:{basePath}";
            Console.WriteLine($"TransformConfig - Exception occurred: {msg}");
            Console.WriteLine($"TransformConfig - Processing aborted.");
            Environment.ExitCode = 2;
            return 2;
        }
    }

    public static void TransformConfig(string configFileName, string transformFileName)
    {
        var document = new XmlTransformableDocument();
        document.PreserveWhitespace = true;
        document.Load(configFileName);

        var transformation = new XmlTransformation(transformFileName);
        if (!transformation.Apply(document))
        {
            throw new Exception("Transformation Failed");
        }
        document.Save(configFileName);
    }

  }
}

ตรวจสอบให้แน่ใจว่าคุณเพิ่ม DLL "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.XmlTransform.dll"เป็นข้อมูลอ้างอิง (ตัวอย่างนี้ใช้กับ VS 2015 สำหรับเวอร์ชันที่เก่ากว่าแทนที่v14.0ในพา ธ ด้วยหมายเลขเวอร์ชันที่เหมาะสมเช่นv11.0)

สำหรับVisual Studio 2017,แผนการตั้งชื่อสำหรับเส้นทางที่มีการเปลี่ยนแปลง: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\Webตัวอย่างเช่นสำหรับรุ่นองค์กรก็อยู่ที่นี่:
ฉันคิดว่าสำหรับรุ่นมืออาชีพที่คุณจำเป็นต้องเปลี่ยนในเส้นทางโดยEnterprise Professionalหากคุณกำลังใช้รุ่นแสดงตัวอย่างนอกจากนี้แทนที่โดย2017Preview

นี่คือภาพรวมว่าเส้นทางที่มีการเปลี่ยนแปลงสำหรับรุ่นที่แตกต่างกันของ Visual Studio (ถ้าคุณไม่ได้มีรุ่น Enterprise คุณอาจจำเป็นต้องเปลี่ยนEnterpriseโดยProfessionalในเส้นทาง):

VS เวอร์ชัน        Path (สำหรับMicrosoft.Web.XmlTransform.dll)
2015                   C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web
2017                   C:\Program Files (x86)\Microsoft Visual Studio\2017\
                          Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\Web
2019                  C:\Program Files (x86)\Microsoft Visual Studio\2019\
                          Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\Web

รวบรวมและใส่ไฟล์ exe C:\MyTools\ลงในไดเรกทอรีเช่น

การใช้งาน: คุณสามารถใช้ในเหตุการณ์การสร้างโพสต์ของคุณ(ในคุณสมบัติโครงการเลือกสร้างเหตุการณ์จากนั้นแก้ไขบรรทัดคำสั่งหลังสร้างเหตุการณ์ ) พารามิเตอร์บรรทัดคำสั่งคือ (ตัวอย่าง):

"C: \ MyTools \ TransformConfig.Exe" /d:Web.config /t:Web.$(ConfigurationName).config /s:Web.Template.config / b: "$ (ProjectDir) \"

เช่นชื่อแรกของไฟล์ config ตามด้วยไฟล์ config แปลงตามด้วยการกำหนดค่าเทมเพลตที่เป็นทางเลือกตามด้วยพา ธ ไปยังโครงการของคุณที่มีทั้งสองไฟล์

ฉันได้เพิ่มพารามิเตอร์การกำหนดค่าเทมเพลตที่เป็นทางเลือกเพราะมิฉะนั้นการกำหนดค่าเดิมที่สมบูรณ์ของคุณจะถูกเขียนทับโดยการแปลงซึ่งสามารถหลีกเลี่ยงได้โดยการให้เทมเพลต

สร้างเทมเพลตโดยเพียงแค่คัดลอก Web.config ดั้งเดิมแล้วตั้งชื่อว่า Web.Template.config

บันทึก:

  • หากคุณต้องการคุณสามารถคัดลอกTransformConfig.exeไฟล์ไปยังพา ธ Visual Studio ที่กล่าวถึงข้างต้นซึ่งไฟล์นั้นMicrosoft.Web.XmlTransform.dllอยู่และอ้างถึงในโปรเจ็กต์ทั้งหมดของคุณที่คุณต้องการเปลี่ยนคอนฟิกของคุณ

  • สำหรับพวกคุณที่สงสัยว่าทำไมฉันจึงเพิ่มEnvironment.ExitCode = x;งาน: การส่งคืน int จาก Main ไม่ได้ช่วยในเหตุการณ์สร้าง ดูรายละเอียดที่นี่

  • หากคุณกำลังเผยแพร่โปรเจ็กต์ของคุณและคุณกำลังใช้ Web.Template.config ตรวจสอบให้แน่ใจว่าคุณได้สร้างโซลูชันของคุณขึ้นมาใหม่ด้วยการกำหนดค่าที่ถูกต้อง (โดยปกติคือ Release) ก่อนที่คุณจะเผยแพร่ สาเหตุก็คือ Web.Config ถูกเขียนทับระหว่างการดีบักและคุณอาจเปลี่ยนไฟล์ผิดเป็นอย่างอื่น


1
ดูเหมือนว่าโพสต์ CodeProject จะถูกหลอก เขาใช้ภาพหน้าจอสำหรับตัวอย่างโค้ดของเขาและตอนนี้ตั้งแต่บล็อกของเขาหยุดทำงานพวกเขาก็หายไปกับประวัติศาสตร์
Eric Lloyd

3
ใช่น่าเสียดายที่ภาพหน้าจอหายไป แต่อย่างน้อยก็ยังคงมีข้อความบทความอธิบายแนวทาง ฉันได้เพิ่มคำอธิบายข้อความลงในคำตอบของฉันเพื่อหลีกเลี่ยงการสูญหาย
Matt

1
จริงอยู่บางทีเราอาจลองติดต่อผู้เขียน James Coleman ที่ codeproject เพื่อแก้ไขปัญหาที่นั่น ไม่แน่ใจว่าเขายังคงทำงานอยู่ที่นั่นหรือไม่ @ThomasTeilmann
Matt

ฉันคิดว่าสิ่งนี้อาจคล้ายกับสิ่งที่อยู่ในภาพหน้าจอที่หายไป ดูเหมือนว่าจะบรรลุผลขั้นพื้นฐานเดียวกัน stackoverflow.com/a/6437192/1003916
user1003916

22

การตอบคำถามของคุณไม่ใช่เรื่องง่ายเพราะมันก่อให้เกิดปัญหา - หากคุณต้องการแปลง Web.config ด้วย Web.debug.config - ควรเก็บเอฟเฟกต์การแปลงไว้ที่ไหน ใน Web.config เอง? สิ่งนี้จะเขียนทับไฟล์ต้นฉบับการแปลง! นั่นอาจเป็นสาเหตุที่ Visual Studio ไม่ทำการแปลงระหว่างการสร้าง

คำตอบของ Matt ก่อนหน้านั้นถูกต้อง แต่คุณอาจต้องการผสมเพื่อให้มีโซลูชันทั่วไปที่ใช้งานได้เมื่อคุณเปลี่ยนการกำหนดค่าโซลูชันที่ใช้งานอยู่จากการแก้ปัญหาเป็นรุ่นอื่น ๆ นี่เป็นวิธีง่ายๆ:

  1. สร้างการแปลงการกำหนดค่าของคุณสำหรับการกำหนดค่า (Debug, Release, ฯลฯ )
  2. เปลี่ยนชื่อWeb.configไฟล์เป็นWeb.base.config- การแปลงควรเปลี่ยนชื่อโดยอัตโนมัติตามนั้น ( Web.base.Debug.configฯลฯ )
  3. เพิ่มไฟล์ XML transformWebConfig.projต่อไปนี้ในโฟลเดอร์โครงการของคุณ:
<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" DefaultTargets="TransformWebConfig" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="TransformWebConfig">
    <TransformXml Source="Web.base.config" Transform="Web.base.$(CurrentConfig).config" Destination="Web.config" />
  </Target>
</Project>
  1. ไปที่คุณสมบัติโปรเจ็กต์ของคุณเลือกสร้างเหตุการณ์และเพิ่มเนื้อหาต่อไปนี้ในบรรทัดรับคำสั่งหลังสร้างเหตุการณ์ :
@if exist "%ProgramFiles(x86)%\MSBuild\12.0\bin" set PATH=%ProgramFiles(x86)%\MSBuild\12.0\bin;%PATH%
msbuild $(ProjectDir)transformWebConfig.proj /t:TransformWebConfig /p:CurrentConfig=$(ConfigurationName) /p:TargetProjectName=$(TargetPath)

ตอนนี้เมื่อคุณสร้างโซลูชันของคุณไฟล์ Web.config จะถูกสร้างขึ้นด้วยการแปลงที่ถูกต้องสำหรับการกำหนดค่าที่ใช้งานอยู่


คำตอบที่สะอาดและดีที่สุด คำถามบางประการ: 1. เหตุใดการตรวจสอบ XML จึงบอกว่าองค์ประกอบของ TransformXml ไม่ถูกต้องภายในองค์ประกอบเป้าหมาย (งานสร้าง BTW) 2. ตอนนี้สร้าง Web.Config จริงแล้วฉันยังคงเพิ่ม Web.Config ในโปรเจ็กต์ ตอนนี้เมื่อใดก็ตามที่ฉันสลับไปมาระหว่าง Debug / Release web.config จะเปลี่ยนไป แต่ฉันไม่ต้องการผูกมัดสิ่งนั้นตลอดเวลาใน repo ต้นทาง
Csaba Toth

1. ไม่สามารถบอกได้ว่า VS ตรวจสอบความถูกต้องของ XML นี้กับสคีมาอย่างไร แต่คำเตือนนี้เป็นเรื่องปกติดังนั้นคุณจึงไม่ต้องสนใจมัน 2. ขึ้นอยู่กับว่าคุณใช้ repo อะไร แต่คุณสามารถใช้รายการไฟล์ git.ignore ได้เช่นกัน
komsky

4
สิ่งนี้ใช้ได้ดีสำหรับฉัน - เพิ่งเปลี่ยน 12 ในไฟล์ build-event และ proj เป็นเวอร์ชันปัจจุบัน สำหรับเหตุการณ์ post-build ผมใช้'"$(MSBuildBinPath)\msbuild.exe" $(ProjectDir)TransformWebConfig.proj /t:TransformWebConfig /p:CurrentConfig=$(ConfigurationName) /p:TargetProjectName=$(TargetPath) และมีการปรับปรุงv12.0ไปv14.0ในแฟ้ม .proj
Jovie

1
สำหรับ VS 2017 ปรับเปลี่ยนทุก12.0การ14.0
Csaba Toth

1
1) อย่าลืมรวม web.config ที่สร้างขึ้นในโครงการเว็บมิฉะนั้นจะไม่คัดลอกไปยังโฟลเดอร์เป้าหมายหลังจากเผยแพร่ 2) หาก
บิลด์

8

สำหรับ VS 2017 ฉันพบคำตอบที่นี่ไม่แน่ใจว่าทำไมไม่มีใครอ้างถึงข้างต้นเนื่องจากดูเหมือนว่าจะเป็นโซลูชันยอดนิยม ง่ายมากด้วย ตรวจสอบให้แน่ใจว่าคุณเห็นความคิดเห็นจาก IOrlandoni ในวันที่ 5 มีนาคม 2019 เพื่อให้ใช้งานได้ใน VS 2017 และทุกเวอร์ชัน

โดยพื้นฐานแล้วมันเป็นสเต็ปเปอร์สองตัว ขั้นแรกให้คุณแก้ไขไฟล์. csproj โดยต่อท้ายโค้ดด้านล่าง ประการที่สองคุณสร้างการกำหนดค่า web.base.config ใหม่และคัดลอก web.config ที่มีอยู่ที่นั่น หลังจากนั้นบิวด์ใด ๆ จะเขียนทับ web.config ของคุณด้วยการเปลี่ยนแปลงที่คุณต้องการ

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild">
    <TransformXml Source="Web.Base.config" 
        Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>  

นี่อาจเป็นคำตอบที่ดีที่สุด แต่ IMO ไม่มีเคล็ดลับ หากคุณเปลี่ยนWeb.configจากContentเป็นNoneแล้วคุณสามารถใช้Source="Web.config" Destination="$(TargetPath).config"(หรืออาจใช้กับโครงการบางประเภทDestination="$(TargetDir)Web.config") ฉันยังย้ายการแปลงไปAfterBuildเนื่องจากไม่จำเป็นต้องทำก่อนที่จะคัดลอกไฟล์อีกต่อไป
Peter Taylor

โอเคจริงไม่ได้ผลเพราะเหตุผลบางอย่างฉันไม่สามารถกำหนดค่าให้ทำงานbinได้
Peter Taylor

5

คำถามของคุณได้รับคำตอบทันที - คำอธิบายคือการแปลงจะใช้กับการเผยแพร่ไม่ใช่สร้าง

อย่างไรก็ตามฉันคิดว่ามันไม่ได้เสนอวิธีแก้ปัญหาในการบรรลุสิ่งที่คุณต้องการทำ

ฉันกำลังดิ้นรนกับปัญหานี้มาสองสามวันแล้วโดยกำลังมองหาวิธีทำให้ web.config สะอาดและตั้งค่าคีย์ทั้งหมดที่แตกต่างกันไปตามสภาพแวดล้อมในไฟล์การแปลงที่เกี่ยวข้อง ข้อสรุปของฉันคือวิธีแก้ปัญหาที่ง่ายและเสถียรที่สุดคือการใช้ค่าดีบักใน web.config ดั้งเดิมซึ่งจะปรากฏอยู่เสมอเมื่อคุณทำการดีบักทำงานใน Visual Studio

จากนั้นสร้างการแปลงสำหรับสภาพแวดล้อมต่างๆที่คุณต้องการเผยแพร่ - ทดสอบการรวมการผลิต - สิ่งที่คุณมี ฟังก์ชันในตัวในตอนนี้ในการแปลงไฟล์ web.config เมื่อเผยแพร่จะเพียงพอสำหรับสิ่งนี้ ไม่จำเป็นต้องใช้ SlowCheetah หรือแก้ไขเหตุการณ์ในการสร้างหรือไฟล์โครงการ หากคุณมีเฉพาะโครงการเว็บที่เป็น

หากคุณต้องการคุณสามารถมีไฟล์ web.debug.config ในโซลูชันของคุณเพียงเพื่อเก็บไฟล์แยกต่างหากพร้อมกับค่าทั้งหมดที่เกี่ยวข้องกับสภาพแวดล้อมการพัฒนา อย่าลืมแสดงความคิดเห็นว่าไม่ได้ใช้ค่านี้เมื่อทำงานใน Visual Studio ในกรณีที่มีคนอื่นพยายามใช้เพื่อจุดประสงค์นั้น!


1

ใช้ Octopus Deploy (ฉบับชุมชนฟรี) และปล่อยให้มันเปลี่ยนรูปแบบweb.configสำหรับคุณ ขั้นตอน:

  1. ตั้งค่า Octopus เพื่อปรับใช้เว็บแอปพลิเคชันของคุณ
  2. ตรวจสอบให้แน่ใจคุณWeb.Release.configมีBuild Actionชุดคุณสมบัติที่จะContentเช่นเดียวกับหลักของคุณweb.configไฟล์

แค่นั้นแหละ! Octopus จะจัดการส่วนที่เหลือโดยไม่ต้องกำหนดค่าพิเศษใด ๆ การปรับใช้เว็บไซต์ IIS เริ่มต้นจะทำสิ่งนี้ได้ทันที:ใส่คำอธิบายภาพที่นี่


หมายเลข 2 คือกุญแจสำคัญ :)
Reza

0

เห็นได้ชัดว่ามีส่วนขยายสำหรับ Visual Studio 2015

https://visualstudiogallery.msdn.microsoft.com/05bb50e3-c971-4613-9379-acae2cfe6f9e

แพ็คเกจนี้ช่วยให้คุณสามารถแปลง app.config หรือไฟล์ XML อื่น ๆ ตามการกำหนดค่าการสร้าง


SlowCheeta ไม่ใช่เรื่องใหม่ มันมีมานานแล้ว 1.1 ของพวกเขาเผยแพร่ในวันที่ 9/8/2011
HaBo

@HaBo ขอบคุณสำหรับความสนใจของคุณฉันลบnewโลกเป็นประโยค
Amir Astaneh

0

เมื่อเร็ว ๆ นี้ฉันมีปัญหาเดียวกันกับไฟล์web.configรุ่นเก่าที่ใช้. NET Framework 2.0 วิธีแก้ปัญหาก็แค่ลบเนมสเปซของ web.config ( xmlns attibute ในconfiguration root node):

ก่อน: <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

หลังจาก: <configuration>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.