đọc từ tập tin app.config


131

Tôi đang cố gắng đọc BeginMonthColumn và CategoryHeadColumn từ tệp app.config bên dưới bằng mã

ConfigurationSettings.AppSettings["StartingMonthColumn"]

nhưng nó đang trả về null, cũng là Cấu hình cài đặt.AppSinstall.Count trả về 0

Xin hãy giúp tôi đọc cái này trong ứng dụng windows của tôi

<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CTARepository.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <CTARepository.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value />
            </setting>
        </CTARepository.Properties.Settings>
    </userSettings>
    <appSettings>
        <add key="StartingMonthColumn" value="7"/>
        <add key="CategoryHeadingColumn" value="1"/>
    </appSettings>
</configuration>

Bạn đang cố chạy ứng dụng từ thư mục \ bin \ debug trong khi thay đổi tệp cấu hình ở thư mục gốc của dự án? Nếu không, thay đổi cấu hình và xây dựng lại mã sau khi chạy dọn dẹp.
Kangkan

1
Các tập tin không được đặt tên là "app.config" phải không? Chắc chắn nó được đặt tên trong dự án của bạn, nhưng trong thư mục đầu ra của ứng dụng, nó phải được đặt tên giống như nhị phân đầu ra của bạn + ".config" (như "MyL Library.dll.config" hoặc "MyProgram.exe.config ",
V.v

@ BrianSlugs83 cảm ơn bạn, tôi đã tự hỏi tại sao ứng dụng của tôi gặp sự cố. Bây giờ, sau hai ngày tìm kiếm ở khắp mọi nơi, câu trả lời là ở đây trong bình luận. Tôi chỉ có "app.config" và không có "MyProgram.exe.config".
śmiglidigli

Vui lòng xem stackoverflow.com/questions/1189364/ để tìm giải pháp. Cảm ơn
Hồi giáo Ariful

Câu trả lời:


171

Cấu hình Cài đặt .AppSettingslỗi thời , bạn nên sử dụng cấu hình quản lý .AppSettings thay vì (bạn sẽ cần phải thêm một tham chiếu đến System.Configuration )

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);

Nếu bạn vẫn gặp vấn đề khi đọc trong cài đặt ứng dụng thì hãy kiểm tra xem app.configtệp của bạn có được đặt tên chính xác không. Cụ thể, nó nên được đặt tên theo lắp ráp thực thi MyApp.exe.config, và nên nằm trong cùng thư mục với MyApp.exe.


2
Nếu Cấu hình cài đặt.AppSinstall ["StartedMonthColumn"] trả về null hoặc một chuỗi rỗng, tôi sẽ nghi ngờ rằng Int32.Pude sẽ đưa ra một ngoại lệ khi cố phân tích các giá trị đó.
Bittercoder

@bittercoder, vâng, tuy nhiên, tệp app.config của bạn sẽ luôn phải có cấu hình chính xác. Nếu OP muốn thêm một số hình thức xử lý trong đó, ví dụ như TryPude thì bằng mọi cách họ có thể. Tuy nhiên, đây không phải là câu hỏi.
James

2
Lưu ý rằng bạn cũng có thể có quyền truy cập vào các phiên bản được nhập mạnh của các giá trị, thông qua Settings.Default. * (Tức là trong trường hợp này sẽ là Settings.Default.StartingMonthColumn).
BrainSlugs83

@ BrainSlugs83 Lưu ý rằng việc cài đặt người dùng khó hiểu với cài đặt ứng dụng. Nếu bạn muốn truy cập mạnh vào cài đặt ứng dụng, bạn sẽ cần triển khai Cấu hình
James

Điều đó không chính xác, nó sẽ lấy các giá trị từ app.config bất kể các giá trị nằm trong phạm vi "Người dùng" hay "Ứng dụng" (từ trình thiết kế GUI, bạn có thể chọn phạm vi cho từng cài đặt).
BrainSlugs83

20

Chỉ để tham khảo trong tương lai, bạn chỉ cần thêm System.Configurationvào thư viện tài liệu tham khảo của mình:

nhập mô tả hình ảnh ở đây


2
câu trả lời của bạn tốt hơn câu trả lời đầu tiên ở đây, mọi người đều quên nói rằng bạn phải thêm một tài liệu tham khảo
essanousy

19

Cấu hình cài đặt.AppSinstall không được dùng nữa , xem tại đây:

http://msdn.microsoft.com/en-us/l Library / system.configuration.configurationsinstall.appsinstall.aspx

Điều đó nói rằng, nó vẫn nên làm việc.

Chỉ là một gợi ý, nhưng bạn đã xác nhận rằng cấu hình ứng dụng của bạn là cấu hình thực thi của bạn đang sử dụng chưa?

Hãy thử đính kèm trình gỡ lỗi và kiểm tra giá trị sau:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

Và sau đó mở tệp cấu hình và xác minh phần có như bạn mong đợi.


Xin chào Bittercoder khi tôi cố gắng lấy giá trị cho AppDomain.CiverseDomain.SetupIn information.ConfigurationFile tôi nhận được C: \\ Chương trình tập tin \ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config không phải là tệp cấu hình của tôi ... tôi làm
Sathish

Đó là tệp cấu hình chính xác ... có thể bạn không mong đợi nó. Trong thực tế, trong trường hợp này, tôi tin rằng C: \ Program Files \ Microsoft Office \ OFFICE11 \ Excel.EXE.config là cấu hình toàn cầu và nếu bạn đặt một Excel.EXE.config có cùng tên trong thư mục của bạn, thì đây là nơi cài đặt ứng dụng của bạn sẽ được đọc từ. Xem các liên kết này để biết chi tiết: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/,
Bittercoder


7

Điều này:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);

làm việc tốt cho tôi

Lưu ý rằng ConfigurationManagertrong System.Configurationkhông gian tên (vì vậy bạn có thể muốn có một using System.Configuration;câu lệnh) và vì những gì bạn đọc có loại chuỗi, bạn sẽ cần phân tích những gì bạn đọc để sử dụng nó như một số.

Ngoài ra, hãy chắc chắn rằng bạn đặt system.configuration.dlllàm tài liệu tham khảo trong dự án hoặc tập lệnh xây dựng của bạn.


tham chiếu nào cần được thêm vào để có được Trình quản lý cấu hình. Cài đặt tôi sử dụng .Net 2.0 Framework
Sathish

1
Bạn cần một tài liệu tham khảo System.Configuration.dll. Các ConfigurationManagerlớp đã được bổ sung trong .NET 2.0, vì vậy bạn nên có OK.
Michael Burr

7

Lý do rất đơn giản, cuộc gọi của bạn ConfigurationSettings.AppSettingskhông trả về tệp cấu hình được yêu cầu. Vui lòng thử bất kỳ cách nào sau đây:

  • Đảm bảo cấu hình ứng dụng của bạn có cùng tên với tệp exe của ứng dụng của bạn - với phần mở rộng .config được nối thêm, ví dụ MyApp.exe.config
  • HOẶC bạn có thể sử dụng ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

Hi vọng điêu nay co ich


3

Cố gắng xây dựng lại dự án của bạn - Nó sao chép nội dung của App.config"<YourProjectName.exe> ​​.config" trong thư viện xây dựng.


2

Đồng thời thêm khóa "StartedMonthColumn" trong App.config mà bạn chạy ứng dụng từ đó, ví dụ như trong App.config của dự án thử nghiệm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.