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 文件夹
Visual Studio 2010 DTE:如何使添加的 DLL 引用成为绝对引用而不是复制