我已经和NuGet搏斗了几天了,我正沮丧地求助于StackOverflow --希望这里的人能给我指明正确的方向。
我曾多次将NuGet用于简单的单人宠物项目,但这是我第一次将它用于我真正关心的事情,并希望具有完全连续的构建等等。我正在尝试创建一个简单的NAnt构建脚本,以获取Git的源代码,确保外部依赖项已被删除、编译和运行测试--普通CI。
最初,我试图使解决方案恢复工作,但它只是没有工作,或者我没有它的工作方式。Visual不在构建服务器上,也不会安装在那里--这不是一个选项。顺便说一句,我无法让解决方案恢复只与两个开发人员一起工作(其中一个开发人员试图恢复源代码并干净地构建)。我认为这是因为“允许解决方案恢复”必须在任何地方打开(而不是默认的)。在深入了解之前,我就对这种方法进行了深入研究--坦白地说,让我的包管理器与IDE紧密地结合在一起会让我感到不舒服,并且希望我能用另一种方式来实现它。我习惯使用的包管理器是简单的命令行工具-- CI构建脚本在构建时调用它,开发人员按需执行。在过去的两个小时里,我一直在用NuGet源代码中的最后30分钟来实现这个目标。我觉得我在对抗这个工具,需要重新启动。
有没有人在多开发者+ CI场景中有最好使用NuGet的例子?这就是我想要的:
任何指点都将不胜感激。
发布于 2013-05-21 01:18:51
下面,我认为你可以实现你的每一项要求:
发布于 2013-05-20 18:36:52
TeamCity有一个构建步骤,名为"NuGet Installer",它从.sln文件中获取所需的包并在本地下载。它不要求Visual运行。
在这里阅读更多相关信息:http://confluence.jetbrains.com/display/TCD7/NuGet+Installer
发布于 2013-05-21 02:08:08
有几种不同的解决方案用于将NuGet集成到您的构建过程中,具体取决于您需要的集成量。在我们的例子中,我们希望使用NuGet作为包管理器,并且允许开发人员构建他们的解决方案,即使他们没有在他们的机器上安装NuGet。为此,我们启用了包还原,它将NuGet二进制文件添加到解决方案文件夹并更新项目文件。注意,NuGet并不总是正确地更新项目文件。在我们的例子中,我们发现一些项目文件被更新了,而另一些没有被更新。要验证项目是否被更新了,您需要以XML文件的形式打开项目文件。要实现此目的,请加载解决方案,右键单击所讨论的项目并选择“卸载项目”。然后再次右键单击该项目,并选择“编辑PROJECT_NAME”。在项目文件中,您应该看到
RestorePackages属性。此属性应具有值true。import语句。这个导入语句应该指向与NuGet二进制文件一起的‘NuGet文件’。下面是我们的一个项目文件的示例(经过大量编辑)
<?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配置文件,您将在该文件中指示包需要‘安装’的位置以及包存储库的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中使用层次结构选项。这允许各个解决方案覆盖计算机特定的配置。另一个好处是我们不需要在构建服务器上安装NuGet (因为可执行文件和配置都在存储库中)。
使用此设置,开发人员可以从Visual构建解决方案。即使开发人员没有安装NuGet,构建也应该在他们的机器上正常工作。但是,请注意,如果没有在visual中安装NuGet,他们就无法向项目添加包。在构建服务器上,您可以简单地使用MsBuild构建解决方案,该解决方案将自动从包存储库下载包。Visual不需要安装在构建机器上(只是您选择的.NET框架)。
https://stackoverflow.com/questions/16653978
复制相似问题