我正在为我的团队设置一个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包中包含的所有文件复制到应用程序的构建输出中?
答案 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)