我有一个 .Net 项目,它使用位于 GAC 中的 MySQL 连接器。
在我的 Nant 构建文件中,似乎没有办法告诉 CSC 在 GAC 中查找此 dll(或类型信息)并且我的项目不会构建。
有没有办法告诉 Nant 这个引用确实存在并且它在 Gac 中。
它确实很奇怪,因为显然所有 Microsoft 库(例如“系统”)都在 Gac 中,并且在构建任何引用这些库时没有问题。我已经确认 Mysql 连接器也在 Gac 中。
谢谢。
我有一个 .Net 项目,它使用位于 GAC 中的 MySQL 连接器。
在我的 Nant 构建文件中,似乎没有办法告诉 CSC 在 GAC 中查找此 dll(或类型信息)并且我的项目不会构建。
有没有办法告诉 Nant 这个引用确实存在并且它在 Gac 中。
它确实很奇怪,因为显然所有 Microsoft 库(例如“系统”)都在 Gac 中,并且在构建任何引用这些库时没有问题。我已经确认 Mysql 连接器也在 Gac 中。
谢谢。
csc 在当前目录、框架目录、/lib 开关中提到的目录、LIB 环境变量中提到的目录中查找 DLL。
但在 GAC 中没有。您可以使用 csc /r:full_path_to_the_gac_file.dll 进行编译,它可以工作,但对用户不太友好。
.NET 程序集安装在两个位置:GAC 和框架目录(这解释了为什么会找到它们)。
您应该在给定目录中复制所需的 DLL,并使用 /lib 开关引用它。当然,在运行时,它将取自 GAC。
另一个(更便携的)解决方案可能是:
<csc output="../bin/output.dll" target="library">
<references>
<include name="\%windir%\assembly\AForge.dll" />
</references>
<sources>
<include name="**/*.cs" />
</sources>
</csc>
您也可以使用 lib 标记将 \%windir\assembly 添加到搜索路径,但它在 NAnt 文档中被标记为已弃用。