Dan*_*ars 5 teamcity continuous-integration visual-studio nuget visual-studio-2012
我有一个package.config文件检入源代码管理.这指定了我想要的Nuget依赖项的确切版本.我们有自己的NuGet存储库.我们自己创建这些NuGet包.
<packages>
<package id="Dome" version="1.0.0.19" targetFramework="net45" />
<package id="Dome.Dojo" version="1.0.0.19" targetFramework="net45" />
</packages>
Run Code Online (Sandbox Code Playgroud)
这些包有一些JavaScript文件,当您在Visual Studio中添加Nuget包作为引用时,会将其复制到项目中的Scripts文件夹中.
我不想检查这些JS文件到源代码控制,我只想检查packages.config文件.
当我的项目在Team City中构建时(或者我在新的签出后在Visual Studio中构建),它不会从NuGet包中复制JS文件.这里有一个问题可以解释类似的问题:
但是,回答这个问题的解决方案对我不起作用; 该解决方案使用ReInstall,这是有问题的,因为它可以自动升级packages.config文件中的版本(例如,如果将依赖项指定为> =).
这一点的重点在于我希望能够从我的源代码控制中检出修订版本,并使用正确的依赖项构建该版本,并且我想使用NuGet的精美打包功能.因此,我不希望任何"在构建期间自动更新到最新版本".
NuGet(http://nuget.codeplex.com/workitem/2094)存在一个关于NuGet文件无法恢复内容文件的问题.它被标记为封闭设计.
考虑到它如何工作,我觉得(但我不是100%肯定)对于程序集NuGet有不同的行为 - 它不会将它们复制到项目中,而是从位置引用它们包文件夹.令我感到震惊的是,NuGet包中的js文件应该与引用 dll的方式类似.
有没有办法构建一个NuGet包,以便它引用JS作为项目中的链接(类似于如何在VS中添加现有文件作为链接)?这会解决我的问题吗?
如果没有,那么我会在结束上面提到的Nuget Issue 2094时给出Jeff Handley给出的建议:
您可以选择创建一个引用NuGet.Core的新控制台可执行文件,您可以构建一个补充包还原,供您自己使用,将包内容复制到项目中.
编写我自己的命令行工具来复制内容看起来好像我在这里推水 - 我做了一些根本错误的事情吗?
这里的根本问题是 Visual Studio 对 JavaScript 项目的支持相对较差,并且 JavaScript 缺乏内置模块加载器。
对于 C#,当您安装包时,它会将 .csproj 文件中的引用添加到磁盘上的程序集。当您构建时,MSBuild 知道将引用的内容复制到 bin 目录。由于您没有检查 bin 目录,因此这一切都很好。
不幸的是,对于 JavaScript 来说,构建系统还不够成熟,并且没有明确定义的指南可供 NuGet 遵循。理想情况下(IMO),Visual Studio 不会直接从源目录运行网站。相反,当您构建时,它会将 JavaScript 文件、CSS 和 HTML 文件复制到 bin 目录中,并从中执行它们。调试时,它会将这些映射回原始 JavaScript 或 TypeScript 文件(因此,如果您进行更改,它不会映射到临时文件)。如果发生这种情况,那么现在就有一个明确定义的构建步骤,并且可能有一个明确定义的 JavaScript 文件标记(而不仅仅是“内容”)。这意味着 NuGet 将能够利用明确定义的 MSBuild 标记,并且包作者可以利用 NuGet 功能来做正确的事情。
不幸的是,以上都不是真的。JavaScript 文件就地运行,如果您在构建时将它们复制到 bin,Visual Studio 会做错误的事情,并且从调试器进行编辑将编辑瞬态文件(而不是原始文件)。因此,NuGet 没有明确定义的放置文件的位置,因此将决定权留给了包作者。包作者知道普通用户将直接从源代码运行(没有构建步骤),因此他们将文件转储到源文件夹中,必须将它们签入到版本控制中。
如果您来自像 C# 这样的现代生态系统,其中有人花时间思考这些事情,那么整个系统就非常陈旧了。
您可以做的是创建一个 MSBuild 任务,在构建之前,该任务将遍历所有包、查找内容并将该内容复制到所需位置。虽然这需要一些工作,但并不是非常困难。
此外,包作者可以在其包中包含一个执行此操作的构建任务,以便在构建之前将其所有内容复制到本地。不幸的是,如果只有一些包作者这样做,那么你最终会得到奇怪的碎片,其中一些包需要提交到版本控制,而其他包则不需要。
归档时间: |
|
查看次数: |
2242 次 |
最近记录: |