Tên 'Trình quản lý cấu hình' không tồn tại trong ngữ cảnh hiện tại


468

Tôi đang cố gắng truy cập connectionStringstừ tập tin cấu hình. Mã này là ASP.NET + C #. Tôi đã thêm System.Configurationvào tài liệu tham khảo và cũng được đề cập với việc sử dụng. Nhưng nó vẫn không chấp nhận lắp ráp.

Tôi đang sử dụng VSTS 2008. Bạn có biết lý do gì không?

Một điều kỳ lạ khác là tên lắp ráp được hiển thị là "System.configuration", chữ thường là c không phải là cách hiển thị tên cho các cụm hệ thống khác.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace Utility
{
    public class CommonVariables
    {
        public static String ConnectionString
        {
            get { return ConfigurationManager.ConnectionStrings["EmployeeEntities"].ConnectionString; }
        }  
    }  
}

Cấu hình:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="qbankEntities" connectionString="metadata=res://*/qbankModel.csdl|res://*/qbankModel.ssdl|res://*/qbankModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=qbank;Persist Security Info=True;User ID=**;Password=****;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

1
Bạn có thể thêm một số mã? Bạn có ý gì bởi nó sẽ không chấp nhận lắp ráp? Bạn đang nhận được một thông báo lỗi cụ thể?
Joshua Belden

Câu trả lời:


820

Nó không chỉ cần thiết để sử dụng không gian tên System.Configuration . Bạn cũng phải thêm tài liệu tham khảo vào hội đồng System.Configuration.dll , bởi

  1. Nhấp chuột phải vào Tài liệu tham khảo / Phụ thuộc
  2. Chọn Add Reference
  3. Tìm và thêm System.Configuration.

Điều này sẽ làm việc chắc chắn. Ngoài ra đối với NameValueCollectionbạn phải viết:

using System.Collections.Specialized;

1
+1 Cảm ơn Kieran. Bạn có biết tại sao điều này phải được thực hiện khi hầu hết các hội đồng khác có thể được gọi đơn giản bằng cách bao gồm câu lệnh 'bằng cách sử dụng' không?
Dhaust

13
Đây là sự hiểu biết của tôi: nó có thể sai. Khi bạn thêm tham chiếu, bạn sẽ yêu cầu dll được sao chép vào thư mục bin khi biên dịch / xây dựng. Một số dll được xem là lõi được thêm vào khi dự án được tạo, tức là khi bạn đi tập tin-> dự án mới để các tham chiếu được thiết lập tại thời điểm đó. Tất cả đều phải trải qua cùng một quy trình chỉ là một số được thực hiện cho bạn và một số bạn phải làm thủ công. Bạn có thể kiểm tra nó bằng cách xóa tham chiếu đến dll hệ thống của bạn và xem tất cả mã của bạn không thành công. =)
Kieran

7
ĐỒNG Ý. Vì vậy, tôi đã thực hiện một ít nghiên cứu hơn và thấy rằng ở trên hầu hết là sự thật. Tuy nhiên, một số tệp sẽ không cần phải ghi vào thư mục bin khi chúng đang chạy trong Global cash cashe (GAC), trong đó bin là tiền mặt lắp ráp cục bộ. Giống như System.dll.
Kieran

4
Không gian tên 'System.Configuration' có thể được tìm thấy trong 'System' dll, đó là lý do tại sao có thể có một số vết xước khi Intellisense chấp nhận 'bằng cách sử dụng System.Configuration;' nhưng sẽ không tìm thấy ConfigurationManager trừ khi System.Configuration.dll được tham chiếu bởi dự án.
jaybro

99

Trong dự án của bạn, nhấp chuột phải, Thêm tham chiếu ... , trong tab .NET, tìm System.Configurationtên thành phần và nhấp OK.

using System.Configurationbáo cho trình biên dịch / IntelliSense tìm kiếm trong không gian tên đó cho bất kỳ lớp nào bạn sử dụng. Nếu không, bạn sẽ phải sử dụng tên đầy đủ ( System.Configuration.ConfigurationManager) mỗi lần. Nhưng nếu bạn không thêm tài liệu tham khảo, đó là không gian tên / lớp sẽ không thể tìm thấy bất cứ nơi nào.

Lưu ý rằng một DLL có thể có bất kỳ không gian tên nào, vì vậy System.Configuration.dllvề mặt lý thuyết, tệp có thể có không gian tên Some.Random.Name. Để rõ ràng / nhất quán, chúng thường giống nhau, nhưng có những trường hợp ngoại lệ.


40

Ok .. nó làm việc sau khi khởi động lại VSTS. Các liên kết đề xuất giải pháp cho cùng một vấn đề. Ước gì tôi có thể nhìn thấy nó trước đây. :)


16
Hơn 7 năm sau và vẫn còn xấu hổ vì đây là câu trả lời thường xuyên.
Phục hồi Monica Cellio

4
không có gì giống như đánh dấu câu trả lời của bạn là câu trả lời, khi đó thực sự không phải là câu trả lời. Các mod quá tệ không thể chỉnh sửa nó cho câu trả lời đúng. Anh chàng đánh dấu câu trả lời của riêng mình cho điểm ....
ggiaquin16

1
@ ggiaquin16 bạn không nhận được điểm nếu bạn chấp nhận chính mình;)
JAD

@calios hoặc nếu bạn đọc câu hỏi ban đầu, bạn có thể thấy rằng người hỏi đã thêm phần lắp ráp vào dự án trong phiên bản đầu tiên của câu hỏi. Đối với phiên bản và phiên bản VS cụ thể này, cần phải khởi động lại IDE hoặc lỗi sẽ tiếp tục xảy ra. đó là giải pháp Hai câu trả lời được đánh giá cao ở đây không bao giờ có liên quan đến câu hỏi thực sự được hỏi, nhưng bạn không nghĩ tự hỏi tại sao ai đó sẽ trả lời một câu hỏi mà không đọc nó trước. (trong khi thực hiện mọi việc chỉ vì những điểm có vẻ rất hiệu quả trong trường hợp này ...)
ebyrob

24

Thêm System.Configurationtham chiếu cho tất cả các dự án sẽ giải quyết điều này.

  1. Chuyển đến Project->Add Reference

  2. Trong hộp xuất hiện, nhấp vào All assembliestab danh sách trong danh sách bên trái.

  3. Trong danh sách trung tâm, cuộn đến System.Configurationvà đảm bảo hộp được chọn.

  4. Nhấp vào ok để đăng ký và bây giờ bạn sẽ có thể truy cập ConfigurationManagerlớp.


19

Thêm câu trả lời này, vì không có giải pháp được đề xuất nào phù hợp với tôi.

  1. Nhấp chuột phải vào tab tài liệu tham khảo để thêm tài liệu tham khảo.
  2. Nhấp vào tab Lắp ráp
  3. Tìm kiếm 'System.Configuration'
  4. Nhấn OK.

9

Nếu bạn nhận được rất nhiều cảnh báo (trong trường hợp của tôi là 64 trong một giải pháp!) Như

CS0618: 'ConfigurationSettings.AppSettings' là lỗi thời: '! Phương pháp này là lỗi thời, nó đã được thay thế bởi System.Configuration System.Configuration.ConfigurationManager.AppSettings'

bởi vì bạn đang nâng cấp một dự án cũ hơn, bạn có thể tiết kiệm rất nhiều thời gian như sau:

  1. Thêm System.Configurationlàm tài liệu tham khảo cho phần Tài liệu tham khảo của bạn .
  2. Thêm hai usingcâu lệnh sau vào đầu mỗi .cstệp class ( ):

    using System.Configuration; using ConfigurationSettings = System.Configuration.ConfigurationManager;

Bằng cách thay đổi này, tất cả các lần xuất hiện của

ConfigurationSettings.AppSettings["mySetting"]

Bây giờ sẽ tham chiếu trình quản lý cấu hình phù hợp, không còn là trình quản lý không dùng nữa và tất cả các cảnh báo CS0618 sẽ biến mất ngay lập tức.

Tất nhiên, hãy nhớ rằng đây là một cách nhanh chóng hack. Về lâu dài, bạn nên xem xét tái cấu trúc mã.


9

Tôi đã nhận được một giải pháp tốt hơn cho vấn đề này configurationmanager does not exist in the current context.

Đối với một chuỗi kết nối đọc từ web.configchúng ta cần phải sử dụng ConfigurationManagerlớp và phương pháp của nó. Nếu bạn muốn sử dụng, bạn cần thêm không gian tên bằng cách sử dụng System.Configuration;

Mặc dù bạn đã sử dụng không gian tên này, nhưng khi bạn cố gắng sử dụng ConfigurationManagerlớp thì hệ thống sẽ hiển thị một lỗi cấu hình, lỗi không tồn tại trong bối cảnh hiện tại. Để giải quyết vấn đề này:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 

6

Bạn có chắc là bạn đã thêm một tham chiếu đến cụm .NET và không phải cái gì khác không? Tôi sẽ xóa tham chiếu của bạn và sau đó thử thêm lại nó, đảm bảo bạn chọn từ tab .NET trong hội thoại tham chiếu Visual Studio - phiên bản mới nhất phải là 2.0.0.0 trong GAC.


Chi tiết lắp ráp từ cửa sổ thuộc tính: Tên: System.configuration Đường dẫn: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Phiên bản: 2.0.0.0 Phiên bản thời gian chạy: v2.0.50727 Bất cứ điều gì có vẻ đáng ngờ? Cảm ơn!
bút chì

Không, đó là chính xác như mong đợi. Thật kỳ lạ - tôi xin lỗi, nhưng tôi chưa bao giờ thấy điều này trước đây. Chúc may mắn!
Dan Diplo

6
  1. Nhấp chuột phải vào Dự án
  2. Chọn Gói quản lý NuGet
  3. Tìm System.Configuration
  4. Chọn System.Configuration.ConfigurationManager của Microsoft
  5. Tải về

bây giờ bạn có thể:

using System.Configuration;

4

Để kiểm tra độ tỉnh táo, hãy thử tạo Dự án ứng dụng web mới, mở mã phía sau cho trang Default.aspx. Thêm một dòng trong Page_Load để truy cập chuỗi kết nối của bạn.

Nó nên có System.Configuration được thêm làm tham chiếu theo mặc định. Bạn cũng sẽ thấy câu lệnh sử dụng ở đầu tệp mã của bạn.

Mã của tôi đằng sau tập tin bây giờ trông như thế này và biên dịch không có vấn đề.

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace WebApplication1
{
  public partial class _Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      string connString = ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString;
    }
  }
}

Điều này giả sử tôi có một chuỗi kết nối trong web.config với tên bằng "MyConnectionStringName" như vậy ...

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="MyConnectionStringName"
            connectionString="Data Source=.;Initial Catalog=MyDatabase;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

Vâng, đó là điều cơ bản tôi biết. Nhưng nếu bạn không có ý tưởng nào tốt hơn đôi khi sẽ giúp kiểm tra lại những thứ thực sự đơn giản mà bạn biết nên hoạt động.


3

Chỉ cần cài đặt

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

sau đó sử dụng

using System.Configuration;

2

Nếu mã này nằm trong một dự án riêng biệt, như dự án thư viện. Đừng giả mạo để thêm tham chiếu đến system.configuration.


0

Bạn cũng có thể gặp lỗi này nếu bạn thêm một tham chiếu đến một dự án khác, không liên quan do nhầm lẫn. Kiểm tra nếu điều đó áp dụng cho bạn.


0

Để giải quyết vấn đề này, hãy vào Solution Explorer Và nhấp chuột phải vào tham chiếu và nhấp vào thêm tham chiếu và chọn .net và tìm system.configuration chọn một nhấp chuột ok


0

Thêm tệp trình quản lý cấu hình để kết nối với cơ sở dữ liệu web.config

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.