【发布时间】:2014-03-01 02:54:41
【问题描述】:
我有一个应用程序项目 App.csproj,它引用了 BaseLib.csproj。 BaseLib 使用一些 DevExpress 第三方库并包含对第三方库的引用。 App 不直接使用 DevExpress 库,因此不需要直接引用第三方库。这是BaseLib的参考列表。
当我构建应用程序时,我希望将 DevExpress 库复制到目标目录,以便它能够成功执行。我不想引入构建事件,因为它需要维护 - 我希望将维护本地化到 BaseLib 项目。
这部分工作现在。我有 7 个引用和 5 个 .dll 将复制过来(NavBar 和 Office2007 没有)。不同之处在于 BaseLib.dll 包含 5 个复制的这些语句,但它们不存在于 2 个不复制的语句(来自 ildasm 的输出)。
.assembly extern 'DevExpress.Xpf.Grid.v13.1.Core'
{
.publickeytoken = (B8 8D 17 54 D7 00 E4 9A ) // ...T....
.ver 13:1:4:0
}
.assembly extern 'DevExpress.Xpf.Grid.v13.1'
{
.publickeytoken = (B8 8D 17 54 D7 00 E4 9A ) // ...T....
.ver 13:1:4:0
}
那么,我怎样才能包含另外两个?属性选项卡中的所有设置都相同。 如果有影响的话,其他 2 个会在以后添加。
请注意,这是对这两个问题(Copying a DLL's dependencies in Visual Studio 和 Msbuild doesn't copy references (dlls) if using project dependencies in solution)的跟进。
【问题讨论】:
-
MSBuild 无法复制未使用 .assembly 指令引用的程序集。这就是它结束的地方,做点什么like this。也是从供应商那里获得帮助的地方。
-
BaseLib 是我的程序集。我只是不知道如何在 BaseLib.dll 中生成另外两个 .assembly 指令。 Visual Studio 应该根据参考列表执行此操作,是吗?谢谢。
-
你可能做不到。它们是那种嘎嘎叫的“如果它可用,那么我将使用它”的程序集。比如插件。因此,C# 编译器实际上从未从正在使用的程序集中看到类型,插件使用反射。对于库供应商来说更容易,他们的代码无法编译的方式更少。对于购买该库的程序员来说并不容易,因为他们不想知道它是如何工作的。
标签: c# visual-studio dll