Tôi đang cố gắng thay đổi phần tử bindingRedirect lúc cài đặt bằng cách sử dụng lớp XmlDocument và sửa đổi giá trị trực tiếp. Đây là những gì app.config của tôi trông giống như:Làm thế nào để sửa đổi programBinding trong app.config?
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
...
</sectionGroup>
</configSections>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyDll" publicKeyToken="31bfe856bd364e35"/>
<bindingRedirect oldVersion="0.7" newVersion="1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
...
</configuration>
Sau đó tôi cố gắng sử dụng đoạn mã sau để thay đổi 1.0 đến 2,0
private void SetRuntimeBinding(string path, string value)
{
XmlDocument xml = new XmlDocument();
xml.Load(Path.Combine(path, "MyApp.exe.config"));
XmlNode root = xml.DocumentElement;
if (root == null)
{
return;
}
XmlNode node = root.SelectSingleNode("/configuration/runtime/assemblyBinding/dependentAssembly/bindingRedirect/@newVersion");
if (node == null)
{
throw (new Exception("not found"));
}
node.Value = value;
xml.Save(Path.Combine(path, "MyApp.exe.config"));
}
Tuy nhiên, nó ném ngoại lệ 'không tìm thấy'. Nếu tôi trở lại đường dẫn đến/cấu hình/thời gian chạy nó hoạt động. Tuy nhiên một khi tôi thêm assemblyBinding, nó không tìm thấy nút. Có thể điều này có liên quan đến xmlns? Bất kỳ ý tưởng làm thế nào tôi có thể sửa đổi điều này? ConfigurationManager cũng không có quyền truy cập vào phần này.
Chỉ cần lưu ý, tôi ném ngoại lệ vì đây là một phần của Dự án Thiết lập và đó là cách trình cài đặt được thông báo về bất kỳ lỗi nào. Nó sẽ là tốt hơn để có phương pháp trả về true hoặc false nếu sửa đổi đã được thực hiện. – esac