我正在创建一个nuget包,我想确保它在所有场景中都能正常工作.
在这种情况下,我使用"Build"约定文件夹添加构建目标.我添加的目标需要知道nuget包文件夹的位置.
我发现的很多例子都假设他们只能使用"..\Packages",但是Nuget允许你通过nuget.config文件重新定位packages文件夹.
有没有办法从build.targets文件中获取nuget包文件夹的正确位置?
(背景资料)
我正在编写一个需要将本机dll复制到bin目录的包.我可以使用post build事件,但这似乎有点hacky.我宁愿包含一个使用SkipUnchangedFiles = true调用msbuild <copy>任务的目标,但为了使其工作,我需要知道packages文件夹的位置.
Jos*_*iel 12
在.targets文件中,您可以使用该$(MSBuildThisFileDirectory)属性访问当前文件的位置.
假设.targets文件位于nuget构建文件夹中,您可以使用以下相对路径访问其自己的包文件夹:
<PropertyGroup>
<ThisPackageDirectory>$(MSBuildThisFileDirectory)..\</ThisPackageDirectory>
...
Run Code Online (Sandbox Code Playgroud)
要解决背景信息部分中描述的问题,您有两个步骤.
A.确保将本机dll复制到项目中 - 编辑nuspec的一部分,以便在构建包时将文件复制到项目根目录中:
<?xml version="1.0"?>
<package>
<metadata>
...
</metadata>
<files>
<file src="install.ps1" target="Tools"/>
<file src="nativedll1.dll" target="content" />
<file src="nativedll2.dll" target="content" />
</files>
</package>
Run Code Online (Sandbox Code Playgroud)
B.创建一个install.ps1文件(请注意我将其包含在上面的示例中)您的install.ps1文件应如下所示.
param($installPath, $toolsPath, $package, $project)
$file1 = $project.ProjectItems.Item("nativedll1.dll")
$file2 = $project.ProjectItems.Item("nativedll2.dll")
# set 'Copy To Output Directory' to 'Copy if newer'
$copyToOutput1 = $file1.Properties.Item("CopyToOutputDirectory")
$copyToOutput1.Value = 2
$copyToOutput2 = $file2.Properties.Item("CopyToOutputDirectory")
$copyToOutput2.Value = 2
Run Code Online (Sandbox Code Playgroud)