app.config 引用源代码路径而不是 dll 路径

Posted

技术标签:

【中文标题】app.config 引用源代码路径而不是 dll 路径【英文标题】:app.config references to source code path instead of dll path 【发布时间】:2015-07-16 14:35:58 【问题描述】:

我正在为 excel 开发一个插件

在 excel 中,我添加对创建的 dll 文件的引用并使用该文件中的函数

例子

Set o = CreateObject("DllName.PublishFile")

这里我添加了对.tlb 文件的引用 即在excel中我按下alt+f11转到宏,我点击工具,点击参考并通过浏览文件路径添加.tlb文件

这个文件的位置是

C:/Program Files/Project/Bin/Debug

在代码中,获取我使用过的app.config的路径

System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase

获取 dll 的位置,即D:/ProjectName/Bin/Debug

在此之后,我使用 installshield 创建安装程序并安装它

现在dll的位置是C:/Program Files/Project/

这里有 app.config、dll.config 等

安装后,我更改了dll的引用

即我选择了C:/Program Files/Project/ 中的.tlb 文件,而不是D:/ProjectName/Bin/Debug 中的.tlb 文件。但它仍然从 Bin/Debug 中的 app.config 获取配置值!!

如何在此处从 dll 文件夹中的 app.config 获取值?

简而言之 我想要我在 excel 宏中引用的 dll/tlb 文件的路径,即C:/Program Files/ProjectName 但它正在使用源代码路径中存在的 app.config,即D:/project/bin/debug

【问题讨论】:

移除 VBA 标签,Visual Basic for Applications 与 .NET 无关。 问题不清楚:你想要配置文件的路径(回答here)还是当前程序集的路径(在这种情况下你有问题中的代码)? 我想要我在 excel 中引用的 dll/tlb 文件的路径,即 C:/Program Files/ProjectName 但它正在使用源代码路径中存在的 app.config,即 D: /project/bin/debug 这还不清楚。你一直给目录名,就好像它们是路径名一样。然后你引用了 Excel(数据内容或 Excel 的自动化:也不清楚)。请记住,我们只知道您在问题中写的内容。 这样好多了。我怀疑每次构建时都在注册新构建,从而从 Excel 实例化该副本。我将首先检查注册表中的 COM 注册信息。 【参考方案1】:

GetExecutingAssembly() 返回当前正在执行的程序集(例如 .exe)。

假设您在 DLL 中定义了类型 Class1,那么您可以使用它来查找库的路径。

string s = System.Reflection.Assembly.GetAssembly(typeof (Class1)).CodeBase;

【讨论】:

GetExecutingAssembly() 将获得包含当前执行代码的程序集的 Assembly 实例:它只会是直接在该 exe 中的代码的 exe。 (要始终获取 exe,请使用 Assembly.GetEntryAssembly()。)

以上是关于app.config 引用源代码路径而不是 dll 路径的主要内容,如果未能解决你的问题,请参考以下文章

设置程序PrivatePath,配置引用程序集的路径(分离exe和dll)

Visual Studio/MSBuild 将引用的类库的 app.config 作为 *.dll.config 复制到当前项目的 bin 文件夹

winform多项目app.config使用问题

Visual Studio 2010 DTE:如何使添加的 DLL 引用成为绝对引用而不是复制

如何在 dll 级别读取 app.config。? [复制]

VS2012中引用dll目录的配置方法转