有集成的NuGet到您的构建过程中的几个不同的解决方案取决于你需要多少集成,在我们的例子中,我们希望使用NuGet作为包管理器,并允许开发人员构建他们的解决方案,即使他们没有在他们的机器上安装NuGet,为了这个工作,我们启用了包恢复, NuGet二进制文件到您的解决方案文件夹并更新项目文件请注意,NuGet并不总是正确地更新项目文件。在我们的案例中,我们发现一些项目文件去吨更新,但其他人没有。要验证项目是否已更新,您需要以XML文件的形式打开项目文件。为了实现这个负载的解决方案,并右键点击相关项目并选择卸载项目。然后再次右键单击该项目并选择编辑[PROJECT_NAME]。在项目文件中,您应该看到
- A
RestorePackages
第一个属性组中的属性。此属性的值应为true
- 在项目文件的最后一个
import
语句。这个导入语句应该指向NuGet二进制文件附带的'NuGet.targets文件。
下面是我们的项目文件(大量编辑)
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SolutionDir Condition="'$(SolutionDir)' == '' or '$(SolutionDir)' == '*undefined*'">$(MSBuildProjectDirectory)\..</SolutionDir>
<ProjectGuid>{8B467882-7574-41B2-B3A8-2F34DA84BE82}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>MyCompany.MyNamespace</RootNamespace>
<AssemblyName>MyCompany.MyNamespace</AssemblyName>
<!-- Allow NuGet to restore the packages if they are missing -->
<RestorePackages>true</RestorePackages>
</PropertyGroup>
<Import Project="$(SolutionDir)\BaseConfiguration.targets" />
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
<ItemGroup>
<Compile Include="MyClass.cs" />
<!--
.... MANY MORE FILES HERE
-->
</ItemGroup>
<!-- Import the Nuget.targets file which integrates NuGet in the build process -->
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
你需要采取的下一步是提供解决方案级别的NuGet配置文件的一个示例中,你会指出需要“安装”软件包的位置以及package repository的URL是什么。在我们的情况下,解决方案目录结构如下:
(D) root
(D) build
(D) packages
(D) source
(D) .nuget
NuGet.config
NuGet.exe
NuGet.targets
(D) MyCoolProject
MyCoolProject.csproj
MyCoolProject.sln
(D) templates
NuGet.Config
凡(D)
表示目录。
NuGet.config
文件包含以下配置设置。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageRestore>
<add key="enabled" value="True" />
</packageRestore>
<config>
<add key="repositorypath" value="packages" />
</config>
<packageSources>
<add key="OurPackageServer" value="PACKAGE_SERVER_ADDRESS" />
</packageSources>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
</configuration>
该配置文件指示包恢复被启用,该储存库路径(其中,包被放置)是包目录和包源是活动的。
通过在根目录下放置一个NuGet.config文件,我们可以在NuGet中使用hierarchical configuration选项。这允许单个解决方案覆盖计算机特定的配置。另一个好处是,这样我们就不需要在构建服务器上安装NuGet(因为可执行文件和配置在存储库中)。
通过此设置,开发人员可以从Visual Studio构建解决方案。即使没有安装NuGet,构建也可以在开发人员机器上正常工作。但是请注意,如果没有在Visual Studio中安装NuGet,他们将无法将包添加到项目中。 在构建服务器上,您可以简单地使用MsBuild构建解决方案,该解决方案将自动从软件包存储库下载软件包。 Visual Studio不需要安装在构建计算机上(只是您选择的.NET框架)。
这听起来像只是想我需要......如果它来自JetBrains我希望它会工作,并易于使用。 – kellyb