应用程序不包含我的NuGet包中的NLog.config

时间:2018-03-13 22:39:18

标签: c# .net msbuild nuget nlog

我正在为我的团队设置一个NuGet包,用于内部的所有项目。它包含用于为引用包的任何项目配置NLog记录器的代码。但是,我们的自定义NLog.config文件没有显示在最终版本中,但NuGet包中包含的所有其他文件都在那里。

这是我的nuspec文件:

<?xml version="1.0"?>
    <package >
      <metadata>
        ...
      </metadata>
      <files>
        <file src="bin\Release\*.*" target="lib\net45" />    
      </files>
    </package>

我尝试将其添加到文件中,但它是多余的,并且没有任何改变:

<file src="bin\Release\NLog.config" target="lib\net45" />

由于我们将所有文件都包含在*。*中,因此它们都显示在lib / net45文件夹中的.nupkg文件中。所有.dlls,.xmls和.configs都在nupkg中,包括 NLog.config。所以我需要的文件就是将它放入包中。

当我在项目中包含此NuGet包并查看构建输出时,会出现问题。应用程序的构建输出包含我需要的nupkg中的所有内容,NLog.config除外。甚至包括Utilities.dll.config。

是否需要在nuspec文件中指定某些内容?或者在Visual Studio项目中如MSBuild设置?如何确保将NuGet包中包含的所有文件复制到应用程序的构建输出中?

2 个答案:

答案 0 :(得分:1)

我能够通过Adam Catamak的建议解决这个问题,并通过nupkg查看NLog自己的配置包,看看他们是如何做到的。

对我有用的nuspec文件看起来像这样:

<?xml version="1.0"?>
<package >
  <metadata>
    ...
  </metadata>
  <files>
    <file src="bin\Release\*.*" target="lib\net45" />
    <file src="bin\Release\NLog.config" target="content"/>
    <file src="Install.ps1" target="tools"/>
  </files>
</package>

如果您不使用Install.ps1,则用户必须手动将其更新为&#34;始终复制&#34;每次更新包时这是NLog使用的Install.ps1:

param($installPath, $toolsPath, $package, $project)

$configItem = $project.ProjectItems.Item("NLog.config")

# set 'Copy To Output Directory' to 'Copy if newer'
$copyToOutput = $configItem.Properties.Item("CopyToOutputDirectory")
$copyToOutput.Value = 1

# set 'Build Action' to 'Content'
$buildAction = $configItem.Properties.Item("BuildAction")
$buildAction.Value = 2

答案 1 :(得分:0)

你检查nlog.config文件属性吗?

如果文件属性 - “复制到输出目录”是“不复制”,则无法将配置文件看到Release文件夹。

此外,如果要将NLog.config文件下载到主目录中,目标必须是emtpy。

就我而言,我在我的nuspec文件中使用了以下行: <file src="bin\Release\content\log4net.config" target=""></file>

Properties