2

我已经在我当前的项目上创建了一个 DAL,它是持久性无知的,并且有一个需要直接引用的合同 dll,然后是实现 dll,这些 dll 旨在由我们的 IoC 容器扫描以解决 ORM 特定的实现和相关\实现的映射合约 dll 中定义的接口和 POC。我的愿望是将实现 dll 复制到 [solution root]\lib 目录。我创建了一个包并将实现 dll 加载到内容文件夹中,并且在安装包时它们最终位于 [项目根目录]\lib 中。

我的问题是如何让 Nuget 将我的实现 dll 复制到 [solution root]\lib?

4

2 回答 2

0

我发现了一种似乎可行的方法。

  1. 在 Nuget 包的内容文件夹中,将要扫描的 dll 放在临时文件夹中。
  2. 将每个解决方案仅执行一次的 Init.ps1 脚本添加到 Nuget 包的工具文件夹 ( http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package )。在此脚本中,将文件复制到所需目录[solution dir]\lib
  3. 将 Install.ps1 文件添加到工具文件夹中,该文件夹将在每个安装的项目中运行一次,这将删除临时文件夹

然后我可以为我的容器注册创建另一个包,它依赖于我的 dal 包,并使用类似的方法来设置我的 IoC 注册。所以我有

Company.Dal
Company.Dal.Ninject
Company.Dal.StructureMap

然后消费者将安装使用他们使用的相同容器的包,这将负责安装所需的 dll[solution dir]\lib并配置容器以使用这些 dll。

优点

  1. 它会完成工作。

缺点

  1. 必须将 dll 复制到所有已安装的项目然后删除它们
  2. 每次打开解决方案时也会运行 Init.ps1

编辑 @MrMVCMan,我继续创建了一篇博客文章,记录了我是如何在这里做到的:http ://www.ryanvice.net/nuget/creating-a-nuget-package-that-will-install-files-relative-to -解决方案/

于 2012-07-04T09:52:31.053 回答
0

我创建了一个通用的 nuget 包,它可以解决您的问题,但采用不同的方法。它不是将包复制到 lib 文件夹,而是在构建时将它们复制到构建输出文件夹。

您的 nuspec 文件可能如下所示:

<files>
    <file src="output\Implementation.dll" target="output\Implementation.dll" />
    <file src="lib\Implementation.Contract.dll" target="output\Implementation.Contract.dll" />
</files>

将此 nuget 包添加到项目时,会添加 Implementation.Contract.dll 作为对项目的引用,但不会将实施添加到项目中。

有关完整示例,请阅读我的博客: http ://www.baseclass.ch/blog/Lists/Beitraege/Post.aspx?ID=6&mobile=0

于 2014-07-18T08:32:34.197 回答