2015-09-14 12 views
10

Tôi đang cố gắng đặt công tắc tương thích "Switch.System.Xml.IgnoreEmptyKeySequences" từ mục nhập trong tệp app.config (hoặc web.config) nhưng ghi đè xuất hiện bị bỏ qua. Để loại bỏ khả năng cấu hình kỳ lạ của dự án hiện tại của tôi, tôi đã tạo một dự án biểu mẫu Web 4.6 mới (và dự án thử nghiệm liên quan) trong VS2015..Net 4.6 AppContextSwitchOverrides không đặt công tắc được khai báo trong cấu hình

Tôi đang theo đúng hướng dẫn microsoft cho AppContext chuyển https://msdn.microsoft.com/en-us/library/mt298997(v=vs.110).aspxhttps://msdn.microsoft.com/en-us/library/mt270286(v=vs.110).aspx

Các file app.config như sau:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
    <AppContextSwitchOverrides value="Switch.System.Xml.IgnoreEmptyKeySequences=true"/> 
    </runtime> 
</configuration> 

Mã Tôi đang sử dụng để đọc các giá trị là:

 bool valueWasFound; 
     bool valueFromContext; 

     string switchString = "Switch.System.Xml.IgnoreEmptyKeySequences"; 

     valueWasFound = AppContext.TryGetSwitch(switchString, out valueFromContext); 

Và tôi luôn nhận được false cho cả hai valueWasFoundvalueFromContext.

Tôi đã thử điều này với các giá trị chuyển đổi khác có cùng kết quả.

Tôi thấy rằng nếu tôi đặt công tắc trong mã sử dụng

AppContext.SetSwitch("Switch.System.Xml.IgnoreEmptyKeySequences", true); 

Sau đó, công tắc được thiết lập như mong đợi (ví dụ: tôi nhận được true cho cả valueWasFoundvalueFromContext).

Nhưng tôi sẽ rất thích thiết lập này trong App.Config/web.config

Bất kỳ ý tưởng về làm thế nào tôi có được điều này để làm việc sẽ được đánh giá rất nhiều.

+0

Tôi nhìn thấy cùng một hành vi ở đây, nhưng với khóa _Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate_. Đặt nó trong Web.config (ứng dụng IIS) được bỏ qua và 'TryGetSwitch' cho kết quả tương tự như bạn có, thiết lập nó trong mã xuất hiện để làm việc. – arfbtwn

Trả lời

0

Bạn nên sửa đổi App.config trong trình khám phá giải pháp của mình. Tệp này sẽ được đổi tên thành YourAppName.exe.config và phải nằm trong thư mục nhị phân của bạn. Việc xóa hoặc đổi tên tệp đó sẽ khiến ghi đè chuyển đổi này không có hiệu lực. (Bạn cũng có thể thêm tệp đó theo cách thủ công sau khi xây dựng)

Tôi tin rằng bạn phải đặt App.config bên cạnh exe theo cách thủ công, tên này sẽ có tên không đúng.

0

Tôi quan sát hành vi tương tự với cài đặt sau trong .Net framework 4.6.2 <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true"/> Điều lạ là nó thay đổi hành vi khi chạy bình thường nhưng không thành công khi chúng tôi cố gắng chạy UTC.

0

Cách khác là thêm công tắc vào sổ đăng ký. Nó dường như hoạt động.

tài liệu MSDN:

Bằng cách thêm vào một giá trị chuỗi có tên là tên của switch để chìa khóa HKLM \ SOFTWARE \ Microsoft.NETFramework \ AppContext trong registry. Giá trị của nó phải là biểu diễn chuỗi của một Boolean có thể được phân tích bằng phương thức Boolean.Parse; nghĩa là, nó phải là "True", "true", "False" hoặc "false". Nếu thời gian chạy gặp bất kỳ giá trị nào khác, nó sẽ bỏ qua chuyển đổi.

Trong trường hợp của tôi, tôi đã làm tên Value

này: Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate

Value data: đúng

enter image description here

Nhược điểm là nó áp dụng cho tất cả các ứng dụng trên máy tính này. Trong cài đặt sổ đăng ký của tôi thậm chí còn ít được ưa thích hơn so với một cái gì đó mã hóa cứng trong mã, vì vậy tôi sẽ gắn bó với cách tiếp cận chương trình.

Thủ thuật này vẫn gọn gàng mặc dù chỉ để nhanh chóng thử điều gì đó.

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