C# 在VisualStudio中构建项目时如何安装Nuget软件包
我的项目使用一个名为wkhtmltopdf的可执行文件,它将HTML转换为pdf。我创建了一个NuGet包,它只需在项目的根目录中输出exe,就可以被我的应用程序引用和使用 如果我安装了nuget软件包,一切正常,这意味着可执行文件被添加到我的应用程序中,我可以使用它 问题是我不想提交可执行文件,但我希望如果另一个开发人员拆下我的项目并构建它,可执行文件也会添加到他的项目中(无需再次安装Nuget包) 我尝试只提交对包的引用C# 在VisualStudio中构建项目时如何安装Nuget软件包,c#,visual-studio,build,nuget,nuspec,C#,Visual Studio,Build,Nuget,Nuspec,我的项目使用一个名为wkhtmltopdf的可执行文件,它将HTML转换为pdf。我创建了一个NuGet包,它只需在项目的根目录中输出exe,就可以被我的应用程序引用和使用 如果我安装了nuget软件包,一切正常,这意味着可执行文件被添加到我的应用程序中,我可以使用它 问题是我不想提交可执行文件,但我希望如果另一个开发人员拆下我的项目并构建它,可执行文件也会添加到他的项目中(无需再次安装Nuget包) 我尝试只提交对包的引用 但它不起作用 .nuspec文件非常简单,只包含这一行(默认行除外)
但它不起作用
.nuspec文件非常简单,只包含这一行(默认行除外)
。。。
...
知道我所问的是否可行吗?是的,将对包的引用添加到packages.config中,并在构建管道中启用NuGet package Restore。如果您使用的是VST,这是新样式构建的构建管道中的一项特定任务。如果您使用的是Visual Studio,它是首选项(工具->选项->NuGet软件包管理器)中的一个选项。对于其他生成系统,您可以从命令行调用
nuget restore
。是,将对包的引用添加到packages.config中,并在生成管道中启用nuget package restore。如果您使用的是VST,这是新样式构建的构建管道中的一项特定任务。如果您使用的是Visual Studio,它是首选项(工具->选项->NuGet软件包管理器)中的一个选项。对于其他生成系统,可以从命令行调用nuget restore
你知道我的要求是否可行吗
出现此问题的原因是您将文件定位到.nuspec文件target=“content\wkhtmltopf.exe”
中的内容
根据:
我们可以知道基于约定的工作目录中的文件content
:内容被复制到项目根目录。。它修改了项目文件
当另一个开发人员拉下您的项目并构建它时,nuget将把这个包恢复到\packages
文件夹中但是,NuGet不会修改您的项目,就像将该软件包下载到\packages
文件夹一样,不会将该软件包安装到您的项目中
查看更多详细信息
这就是为什么您会看到.nupkg
和一个可执行文件位于\packages
文件夹中的内容文件夹不在项目文件文件夹中,而项目文件文件夹不是您想要的正确位置
要解决此问题,最简单的方法是在Package Manager控制台中使用NuGet命令行:
Update-Package -reinstall
在另一个开发人员拉下您的项目后,强制将包引用重新安装到项目中
当然,您也可以从根本原因解决此问题,就像matt comment一样,将可执行文件定向到工具,如target=“Tools\wkhtmltopf.exe”
,并将.targets文件目标添加到\build
,target=“build\NuGetPackageName.targets”
,以将可执行文件复制到项目文件中。如果你对此感兴趣,或者你对此有任何疑问,我想与你分享更多关于这方面的详细信息
更新:
现在,我将向您展示如何使用工具
文件夹和目标
文件执行此操作
这是我的.nuspec
文件:
<?xml version="1.0"?>
<package >
<metadata>
<id>MyToolPackage</id>
<version>1.0.0</version>
<authors>Tester</authors>
<owners>Tester</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package description</description>
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
<copyright>Copyright 2018</copyright>
<tags>Tag1 Tag2</tags>
</metadata>
<files>
<file src="wkhtmltopdf.exe" target="Tools\wkhtmltopdf.exe" />
<file src="MyToolPackage.targets" target="Build\MyToolPackage.targets" />
</files>
</package>
打包此.nuspec
文件,您将获得以下软件包:
然后将此包安装到您的项目中,当您构建项目时,Visual Studio将在MyToolPackage.targets
文件中执行复制任务。在开始构建之前,wkhtmltopdf.exe将复制到bin文件夹,当然,您可以将其复制到任何其他文件夹,只需更改MyToolPackage.targets
文件中的DestinationFolder
希望这有帮助
你知道我的要求是否可行吗
出现此问题的原因是您将文件定位到.nuspec文件target=“content\wkhtmltopf.exe”
中的内容
根据:
我们可以知道基于约定的工作目录中的文件content
:内容被复制到项目根目录。。它修改了项目文件
当另一个开发人员拉下您的项目并构建它时,nuget将把这个包恢复到\packages
文件夹中但是,NuGet不会修改您的项目,就像将该软件包下载到\packages
文件夹一样,不会将该软件包安装到您的项目中
查看更多详细信息
这就是为什么您会看到.nupkg
和一个可执行文件位于\packages
文件夹中的内容文件夹不在项目文件文件夹中,而项目文件文件夹不是您想要的正确位置
要解决此问题,最简单的方法是在Package Manager控制台中使用NuGet命令行:
Update-Package -reinstall
在另一个开发人员拉下您的项目后,强制将包引用重新安装到项目中
当然,您也可以从根本原因解决此问题,就像matt comment一样,将可执行文件定向到工具,如target=“Tools\wkhtmltopf.exe”
,并将.targets文件目标添加到\build
,target=“build\NuGetPackageName.targets”
,以将可执行文件复制到项目文件中。如果你对此感兴趣,或者你对此有任何疑问,我想与你分享更多关于这方面的详细信息
更新:
现在,我将向您展示如何使用工具
文件夹和目标
文件执行此操作
这是我的.n
<!--
***********************************************************************************************
Copy the wkhtmltopdf.exe to the bin folder of project.
***********************************************************************************************
-->
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CopyTool" BeforeTargets="Build">
<Message Text="Copy tool to bin folder."></Message>
<Copy
SourceFiles="$(SolutionDir)packages\MyToolPackage.1.0.0\Tools\wkhtmltopdf.exe"
DestinationFolder="$(ProjectDir)bin"
/>
</Target>
</Project>