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

如何相对于解决方案根目录复制Nuget内容文件,nuget,nuget-package,Nuget,Nuget Package,我已经在我当前的项目上创建了一个DAL,它是持久性无关的,并且有一个需要直接引用的契约dll,然后是由我们的IoC容器扫描的实现dll,以解析与契约dll中定义的接口和POC相关的ORM特定实现和映射。我希望将实现DLL复制到[solution root]\lib目录。我已经创建了一个包,并将实现DLL加载到内容文件夹中,当安装包时,它们最终位于[project root]\lib中 我的问题是如何让Nuget将我的实现DLL复制到[solution root]\lib?我找到了一种似乎可行的方

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


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

我找到了一种似乎可行的方法

  • 在Nuget软件包的content文件夹中,将要扫描的DLL放在temp文件夹中
  • 将每个解决方案只执行一次的Init.ps1脚本添加到Nuget包()的tools文件夹中。在此脚本中,将文件复制到所需目录
    [solution dir]\lib
  • 将Install.ps1文件添加到tools文件夹,该文件夹将在每个已安装的项目中运行一次,该项目将删除temp文件夹
  • 然后,我可以为容器注册创建另一个包,该包取决于我的dal包,并使用类似的方法设置我的IoC注册。所以我会

    Company.Dal
    Company.Dal.Ninject
    Company.Dal.StructureMap
    
    然后消费者将安装使用他们使用的相同容器的软件包,这将负责将所需的DLL安装到
    [solution dir]\lib
    ,并配置容器以使用这些DLL

    专业人士

  • 它将完成这项工作
  • 缺点

  • 必须将DLL复制到所有已安装的项目,然后将其删除
  • 每次打开解决方案时,Init.ps1也会运行
  • 编辑
    @Mrvcman先生,我继续写了一篇博客文章,记录了我是如何做到这一点的:

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

  • 在Nuget软件包的content文件夹中,将要扫描的DLL放在temp文件夹中
  • 将每个解决方案只执行一次的Init.ps1脚本添加到Nuget包()的tools文件夹中。在此脚本中,将文件复制到所需目录
    [solution dir]\lib
  • 将Install.ps1文件添加到tools文件夹,该文件夹将在每个已安装的项目中运行一次,该项目将删除temp文件夹
  • 然后,我可以为容器注册创建另一个包,该包取决于我的dal包,并使用类似的方法设置我的IoC注册。所以我会

    Company.Dal
    Company.Dal.Ninject
    Company.Dal.StructureMap
    
    然后消费者将安装使用他们使用的相同容器的软件包,这将负责将所需的DLL安装到
    [solution dir]\lib
    ,并配置容器以使用这些DLL

    专业人士

  • 它将完成这项工作
  • 缺点

  • 必须将DLL复制到所有已安装的项目,然后将其删除
  • 每次打开解决方案时,Init.ps1也会运行
  • 编辑
    @MrMVCMan先生,我继续写了一篇博客文章,记录了我是如何做到这一点的:

    我已经创建了一个通用的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 get将作为项目的引用添加,但不会将该实现添加到项目中

    有关完整示例,请阅读我的博客:

    我创建了一个通用的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 get将作为项目的引用添加,但不会将该实现添加到项目中

    有关完整示例,请阅读我的博客:

    谢谢Daniel,您对NuGet的扩展非常有效:文件被复制到输出文件夹,而不是作为参考添加。干杯谢谢Daniel,您对NuGet的扩展非常有效:文件被复制到输出文件夹,而不是作为引用添加。干杯403链接。我认为答案是不完整的,不能在链接上找到。我认为答案不完全是无法找到的。