如何相对于解决方案根复制Nuget内容文件

时间:2012-07-03 23:34:47

标签: nuget nuget-package

我在我当前的项目中创建了一个DAL,它是持久性无知的,并且有一个需要直接引用的契约dll,然后是我们的Io​​C容器要扫描的实现dll,以解析ORM特定的实现和映射。关联\实现合同dll中定义的接口和POC。我的愿望是将实现dll复制到[solution root] \ lib目录。我已经创建了一个包并将实现dll加载到content文件夹中,当安装包时,它们最终会出现在[project root] \ lib。

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

2 个答案:

答案 0 :(得分:1)

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

  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文件添加到tools文件夹中,该文件夹将为每个将删除临时文件夹的已安装项目运行一次
  4. 然后我可以为我的容器注册创建另一个包,这取决于我的dal包并使用类似的方法来设置我的IoC注册。所以我有

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

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

    赞成

    1. 它将完成工作。
    2. 缺点

      1. 必须将dll复制到所有已安装的项目,然后将其删除
      2. 每次打开解决方案时,Init.ps1也会运行
      3. 修改 @MrMVCMan,我继续创建了一篇博客文章,记录了我在这里的表现:http://www.ryanvice.net/nuget/creating-a-nuget-package-that-will-install-files-relative-to-the-solution/

答案 1 :(得分:1)

我已经创建了一个通用的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包添加到Project中时,实现了.Conontract.dll get作为对项目的引用,但实现未添加到项目中。

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