- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有这个被加载到第三方系统中的类库。多年来我一直使用自定义配置并通过 ConfigurationManager.OpenMappedExeConfiguration() 访问它们,因为这始终允许我将配置文件与 dll 相关联并避免修改第三方系统配置文件。我们目前正在升级系统,现在这不起作用。这个异常给我的印象是它从主机 exe 的位置开始探测程序集。我的组件存储在一个单独的位置,以避免将我的所有东西与他们的混在一起(因为我们有非常多样化的组件集,所以更容易维护)。我发现通过将程序集及其配置放在 exe 的主安装目录中它确实有效,所以我确实认为绑定(bind)是今天的问题,但就像我说的那样,我宁愿避免将我的所有东西复制到该目录。这可能是程序集如何加载到他们的系统中的问题吗? ConfigurationManager 的代码库是否发生了变化?那么远程访问配置文件的更简单的方法是什么?
我在他们的网站上发布了一个论坛问题,但我想我会在这里发布一些内容,以防有人知道不需要了解第三方系统 API (AutoCAD 2015) 的 .NET 解决方法。这是我得到的异常,在我看来像是某种具有约束力的问题。也许他们改变了我们的程序集加载到系统中的方式?他们进行了多项安全更改,所以我想这是可能的。
System.IO.FileNotFoundException was caught _HResult=-2147024894 _message=Could not load file or assembly 'TestAutoCADApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. HResult=-2147024894 IsTransient=false Message=Could not load file or assembly 'TestAutoCADApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. Source=System.Configuration FileName=TestAutoCADApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
FusionLog==== Pre-bind state information === LOG: DisplayName = TestAutoCADApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (Fully-specified) LOG: Appbase = file:///C:/Program Files/Autodesk/AutoCAD 2015/ LOG: Initial PrivatePath = NULL
Calling assembly : System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.
LOG: This bind starts in default load context. LOG: Using application configuration file: C:\Program Files\Autodesk\AutoCAD 2015\acad.exe.Config LOG: Using host configuration file: LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/AutoCAD 2015/TestAutoCADApp.DLL. LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/AutoCAD 2015/TestAutoCADApp/TestAutoCADApp.DLL. LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/AutoCAD 2015/TestAutoCADApp.EXE. LOG: Attempting download of new URL file:///C:/Program Files/Autodesk/AutoCAD 2015/TestAutoCADApp/TestAutoCADApp.EXE.
StackTrace: at System.Configuration.TypeUtil.GetTypeWithReflectionPermission(IInternalConfigHost host, String typeString, Boolean throwOnError) at System.Configuration.MgmtConfigurationRecord.CreateSectionGroupFactory(FactoryRecord factoryRecord) at System.Configuration.MgmtConfigurationRecord.EnsureSectionGroupFactory(FactoryRecord factoryRecord) at System.Configuration.MgmtConfigurationRecord.GetSectionGroup(String configKey) at System.Configuration.Configuration.GetSectionGroup(String sectionGroupName) at TestAutoCADApp.Commands.TestConfigSettingsAccess(Action`1 writeAction) in c:\Development-TVA\Visual Studio 2013\TestCode\TestAutoCADApp\TestAutoCADApp\Commands.cs:line 49 InnerException:
我可以展示自定义配置代码,但如果您不熟悉该系统,那么它对您没有任何好处。所以现在,这里有一个非常 super 通用的示例,说明我如何访问它,它已经有一段时间了。
Uri uriCodeBase = new Uri(Assembly.GetExecutingAssembly().CodeBase);
FileInfo appfilePath = new FileInfo(uriCodeBase.LocalPath + ".config");
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = appfilePath.FullName;
Configuration configuration = null;
//Retrieve the Configuration file data and return
configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
MainGroup mainGroup = configuration.GetSectionGroup("mainGroup") as MainGroup;
MainSection mainSection = mainGroup.Sections["mainSection"] as MainSection;
SomeElement someElement = mainSection.SomeElement;
最佳答案
好吧,我终于收到了供应商的消息,事实证明他们曾经在他们的 API 中处理 AssemblyResolve 事件,如果在加载主 dll 时发生问题,该事件碰巧解决了加载次级 dll 的问题。他们显然对此有疑问,并决定在最新版本中将其删除。他们建议我通过自己注册事件并使用以下代码来处理这个问题(对于那些也对此问题感兴趣的人)。
在原题所示的代码中,在开头添加:
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
事件委托(delegate):
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
Assembly assembly = null;
Assembly[] assems = AppDomain.CurrentDomain.GetAssemblies();
String name;
if (args.Name.IndexOf(",") > -1)
name = args.Name.Substring(0, args.Name.IndexOf(","));
else
name = args.Name;
foreach (Assembly assem in assems)
{
if (assem.GetName().Name == name)
{
return assem;
}
}
return assembly;
}
我希望这比实际更有意义,但我猜测 ConfigurationManager 必须尝试访问 dll,就好像它是辅助 dll 一样,以便它可以读取和合并配置文件。它必须正在探测装配并失败。但这只是我的猜测。我不确定。无论哪种方式,实现此方法都会导致在失败时返回正确的程序集。
关于c# - ConfigurationManager.OpenMappedExeConfiguration 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27401841/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!