我最近在C#(.Net 2.0)中写了一个DLL,其中包含一个需要IP地址的类.我的同事改变了类从“.dll.config”(
XML)文件中检索IP – 这显然是由他创建的“应用程序设置”文件(Settings1.settings)自动生成的.这样做的好处是允许最终用户随意更改XML / config文件中的IP地址.
不幸的是,当我从树中检查他的代码并尝试编译(或使用)这个新代码时,调用此DLL的任何应用程序只能获取默认值,而不是文件中的值.
public class form : System.Windows.Forms.Form { public form() { // This call is required by the Windows Form Designer. InitializeComponent(); IP = IPAddress.Parse(Settings1.Default.IPAddress); } }
我发现a reference to this problem on the MSDN forums的用户说:
the ‘old’ values (the ones you define at development time) are hard coded. If the franework isn’t able to access or open the config file it will use the defaults instead. This will always happen if you use settings in a dll.
>这是否意味着我无法在配置文件中存储DLL的外部值? (我的同事以某种方式使这项工作…)
>由于我的框架似乎无法访问或打开配置文件,我如何知道为什么它失败?甚至可以检测出这种情况?
Decker:这有点帮助不幸的是,我正在将这个DLL写入规范,所以我实际上没有访问应用程序的配置文件.如上所述,我的同事创建了一个“Settings1.settings”文件.我当时不明白这一点,但现在似乎添加“1”可以将它从任何调用它的应用程序的设置空间中删除.
我想我想知道的是为什么DLL似乎找不到位于同一目录下的配置文件.跟踪代码一步一步显示没有任何东西.
除此之外,我可以将我的程序集的“输出类型”从“类库”更改为“Windows应用程序”,并在我的DLL代码的开头添加以下行:
[STAThread] public static void Main(string[] args) { System.Windows.Forms.Application.Run(new form()); }
当我运行它,它会生成一个不同的配置文件(“.exe.config”),我可以改变它,并从文件中拉出新的数据.所以我有点困惑.有任何想法吗?