2011-08-26 33 views
53

Tôi đang tạo một gói có thể xuất bản và khi tôi điều hướng đến thư mục obj\Debug\Package\PackageTmp, tôi thấy chuỗi kết nối của web.config được thay thế bằng một thay thế token, và tôi đơn giản không muốn điều đó. Tôi sẽ không sử dụng các tập tin batch xuất bản hay bất cứ thứ gì, tôi sẽ sao chép các tập tin trong thư mục (tôi đang sử dụng hệ thống gói xuất bản để loại bỏ nhiều tệp được tạo động trong khi tôi đang thử nghiệm dự án của mình và cây tập tin tươi/gốc của dự án của tôi) Tôi không muốn các thẻ web.config và biến đổi, vv, tôi chỉ muốn tệp web.config của tôi được sao chép giống như bất kỳ tệp nào khác. Làm thế nào để đạt được điều đó? Tôi đã nhìn thấy phương pháp /p:AutoParameterizationWebConfigConnectionStrings=False cho dòng commad nhưng tôi không sử dụng dòng lệnh, tôi đang sử dụng GUI để tạo gói. Làm cách nào để tôi ngừng web.config khỏi việc thay đổi chuỗi kết nối thành mã thông báo?

Và trước khi bạn nói: Có, tôi biết rằng tôi có thể sao chép web.config ban đầu từ thư mục gốc của tôi, nhưng tôi không muốn giải quyết vấn đề này và tôi muốn kết thúc bằng một cú nhấp chuột Tôi đang thử nghiệm gói xuất bản và thường xuyên tạo lại gói.

Trả lời

98

Bạn cần phải chỉnh sửa file csproj của bạn và trong Debug PropertyGroup bạn sẽ có thêm những điều sau đây:

<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings> 

Tôi đã sau đây trên phát hànhReleaseCERT Configurations trong dự án của tôi. csproj (tôi đã chỉ thêm dòng AutoParameterizationWebConfigConnectionStrings):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == '**Release**|AnyCPU' "> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <OutputPath>bin\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    <!-- add the following line to avoid ConnectionString tokenization --> 
    <AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings> 
</PropertyGroup> 
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '**ReleaseCERT**|AnyCPU'"> 
    <OutputPath>bin\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <Optimize>true</Optimize> 
    <DebugType>pdbonly</DebugType> 
    <PlatformTarget>AnyCPU</PlatformTarget> 
    <ErrorReport>prompt</ErrorReport> 
    <!-- add the following line to avoid ConnectionString tokenization --> 
    <AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings> 
</PropertyGroup> 
+2

Cảm ơn giải pháp - bất kỳ ý tưởng nào * tại sao * chúng tôi phải làm điều này? – Mustafakidd

+1

@ Mustafakidd nó liên quan đến việc đóng gói msdeploy được gọi trong bất cứ khi nào bạn xây dựng dự án của bạn (sử dụng MSBuild). Chỉ nên thay thế ReplacableToken khi triển khai (sử dụng tác vụ TransformXml trong tệp .csproj/.vsproj của bạn. Thông tin thêm tại đây: http://stackoverflow.com/questions/4750153/transforming-files-with-msdeploy) –

+0

Một giải pháp dễ dàng hơn có thể là thêm một chuỗi dummy conn chuyển đổi thành Web.Debug.config hoặc Web.Release.config. – Justin

15

tôi phải làm những gì accepted answer nói, nhưng thay vì trong Properties/PublishProfiles/__THEPROFILE__.pubxml tệp thay vì tệp .csproj.

(điều này có thể bởi vì tôi đang sử dụng VS2012?)

+0

Điều tương tự cho VS 2015. – nzpcmad

-2

tôi đã có thêm những điều sau đây trong phần Release điều kiện của Project.csproj tập tin của tôi:

<InsertAdditionalWebCofigConnectionStrings>False</InsertAdditionalWebCofigConnectionStrings> 
+0

Không khắc phục được sự cố. Tôi nghĩ rằng thẻ XML bạn cung cấp có thể bị viết sai chính tả. Có vẻ như nó phải được viết như thế này ... ChènAdditionalWebConfigConnectionStrings, không InsertAdditionalWebCofigConnectionStrings Dù bằng cách nào, điều này đã không làm việc cho tôi. –

4

Tôi đã có một vấn đề tương tự khi Tôi đã cố gắng tạo gói dự án web bên ngoài để thiết lập WiX theo Travis Illig instructions. Tôi đã giải quyết nó bằng cách thêm AutoParameterizationWebConfigConnectionStrings=False vào số MSBuild/@Properties:

<MSBuild Projects="%(ProjectReference.FullPath)" 
     Targets="Package" 
     Properties="Configuration=$(Configuration);Platform=AnyCPU;AutoParameterizationWebConfigConnectionStrings=False" 
     Condition="'%(ProjectReference.WebProject)'=='True'" 
+1

+1 Đây là giải pháp thích hợp cho trường hợp cụ thể này, vì nó không liên quan đến việc tạo luồng với cấu hình của dự án đã triển khai, chỉ logic triển khai. –

Các vấn đề liên quan