Eri*_*son 8 nuget visual-studio-2012
我知道这是一个以前讨论过的问题,但我有一个我不明白的情况.
我有以下项目
项目A有一个Visual Studio对项目B的引用.我在项目B的代码中使用这两个包,我正在调试模式下构建.Project B config看起来像这样.
<Reference Include="log4net">
<HintPath>..\packages\log4net.2.0.0\lib\net40-full\log4net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.ApplicationServer.Caching.Client">
<HintPath>..\packages\ServerAppFabric.Client.1.1.2106\lib\Microsoft.ApplicationServer.Caching.Client.dll</HintPath>
</Reference>
<Reference Include="Microsoft.ApplicationServer.Caching.Core">
<HintPath>..\packages\ServerAppFabric.Client.1.1.2106\lib\Microsoft.ApplicationServer.Caching.Core.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
*为什么只有log4net的dll文件被复制到Project A的bin文件夹而不是Client和Core文件?任何帮助或解释表示赞赏!*
ale*_*a87 12
为了准确回答您的问题,我们需要了解一些事情。
一种解释取决于您在项目 A 中拥有哪些参考文献。例如,项目 A 除了引用项目 B 之外,还可能包含其他引用,其中有Microsoft.ApplicationServer.Caching.Client和Microsoft.ApplicationServer.Caching.Core,可能选项Copy local设置为false- 但不是log4net。在这种情况下,前两者的复制只会发生在项目 B 中。
另一种可能的解释取决于您的代码对项目 A 和项目 B 中的引用执行的操作。MSBuild 进程不会自动复制项目中实际未使用的引用的程序集。
最后,如果您依赖构建事件来复制引用,请查看“输出”面板,以确保尽管编译成功但没有错误。
无论如何,为了确保复制所有 NuGet 包,我发现编辑.csproj文件并在<PropertyGroup>标签中添加以下内容很有用:
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
Run Code Online (Sandbox Code Playgroud)
从文档中:
如果将此设置
CopyLocalLockFileAssemblies为 true,则任何 NuGet 包依赖项都会复制到输出目录。这意味着您可以使用 dotnet build 的输出在任何计算机上运行您的插件。
根据其文档,<CopyLocalLockFileAssemblies>将任何显式链接的 NuGet 依赖项复制到项目的输出目录中。自然地,如果您希望项目 A 在其输出目录中拥有 NuGet dll 的副本,但项目 A 不复制它,因为例如它属于上述第一种或第二种情况,那么选项可以是:
<CopyLocalLockFileAssemblies>到项目 A 的 csproj 文件中。这不是灵丹妙药,即如果错误在于上述第三种情况,则它将不起作用。
我对某个复杂的依赖图有同样的问题.
我认为这与 NuGet 无关。它应该与引用在 Visual Studio 或 MSBuild 中的工作方式相关。如果您只是引用 ProjectB 中的库,它不会显示在 ProjectA 的 bin 文件夹中。但是,当您使用引用库中的某种类型时,只有这样它才会显示在 bin 文件夹中。
| 归档时间: |
|
| 查看次数: |
12618 次 |
| 最近记录: |