在我的WAP项目中,我引用了另一个C#项目(非Web).在那个C#项目中,我有一个app.config,我将其重命名为[projectName] .config
然后我尝试从我的[项目] .config中获取一个来自我的C#项目中的一些代码的密钥,它找不到它:
return ConfigurationManager.AppSettings["somekey"]
Run Code Online (Sandbox Code Playgroud)
所以我想知道为什么它无法读取我的app.config.我认为ConfigurationManager能够从Web项目的web.config和我的[projectName] .config(app.config)文件中读取密钥,该文件也在我引用的项目中?
我在 Visual Studio 2015 中有一个 C# DLL 项目 (A),其中包含一个我想复制到输出的自定义配置文件,因此“复制到输出目录”设置为“如果更新则复制”。此 DLL 被同一解决方案中的另一个项目 (B) 引用。每当我重建项目 B 时,项目 A 中的配置文件都会按照我的意愿复制到其输出目录中。
问题是,如果我只修改配置文件,它不会被复制到输出中。我认为这是因为项目 A 的输出没有改变,所以 MSBuild 不会费心将其复制到项目 B 的输出目录。
我发现的一种解决方法是将配置文件的内容类型设置为“嵌入式资源”,这会在配置文件更改时重新构建项目 A。这有效,但它有点黑客。有没有更好的方法来获得相同的行为而不实际在 DLL 中包含配置文件?
我有一个从用户设置文件读取的应用程序,该文件通常存储在Users / {username} / AppData / Local / {publisher} / {app} / {version} /user.config中。我想测试直接对文件进行更改,而不是通过Visual Studio属性编辑器进行更改。
我找到了另一个问题的答案,该问题指向应用程序应该从何处加载文件,但是当我在Visual Studio中的调试会话期间进行检查时,似乎不存在该问题。
例如,当我在断点处停止时在“立即”窗口中运行以下命令时,它找不到文件。
System.IO.File.Exists(System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath) //returns false
Run Code Online (Sandbox Code Playgroud)
我想在调试过程中找到此文件的原因是,我收到了有关配置文件已损坏并使生产中的应用程序崩溃的报告。我确定可以将文件恢复为默认状态,但实际上我想在调试环境中重现该问题。
如何找到Visual Studio加载的设置文件?
这是我的应用程序文件夹的样子:
Application:
+ App.exe
+ App.exe.config
Application/Plugins:
+ Plugin1 (folder)
Application/Plugins/Plugin1:
+ Plugin1.dll
+ SomeDll.dll
Run Code Online (Sandbox Code Playgroud)
所以主应用程序 App.exe 寻找插件文件夹并将 {PluginName}.dll 加载到内存中以运行它。该插件通常使用它自己的必须加载的依赖程序集(如 SomeDll.dll)。看起来它有时会制造严重的麻烦。我收到异常,例如无法找到依赖程序集的依赖程序集,我不知道为什么。
例如,我的插件必须加载大量额外的 dll,因为插件运行 OwinSelfHost 服务。
所以它必须加载例如:
System.Web.Http.Owin
Owin
Microsoft.Owin
Microsoft.Owin.Host.HttpListener
Microsoft.Owin.Hosting
Run Code Online (Sandbox Code Playgroud)
当加载Microsoft.Owin.Hosting然后抛出无法加载Microsoft.Owin 的异常
异常看起来像:
Could not load file or assembly 'Microsoft.Owin, Version=2.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of it's dependencies. File not found.
Run Code Online (Sandbox Code Playgroud)