我们正在开发几个完全依赖JavaScript的Web应用程序(我们以前的应用程序是基于ASP.NET MVC,然后再加上一些JavaScript)。
我们有一些文件将在所有项目中共享,将这些文件存储在一个公共项目中,并将它们作为链接添加到各个项目中(就像编译代码一样)会很不错。
显然,对于JavaScript这样的东西,实际上没有“正确位置”的文件,所以这种方法行不通。
有没有人有任何建议,如何保持单个版本的共享JavaScript文件,以供多个项目使用?
我们正在开发几个完全依赖JavaScript的Web应用程序(我们以前的应用程序是基于ASP.NET MVC,然后再加上一些JavaScript)。
我们有一些文件将在所有项目中共享,将这些文件存储在一个公共项目中,并将它们作为链接添加到各个项目中(就像编译代码一样)会很不错。
显然,对于JavaScript这样的东西,实际上没有“正确位置”的文件,所以这种方法行不通。
有没有人有任何建议,如何保持单个版本的共享JavaScript文件,以供多个项目使用?
我知道这个问题已经很古老了,但我还是想提出我的解决方案,因为它比beardtwizzle的方案简单一些。
你可以在你的.csproj文件末尾添加以下内容,确保Visual Studio将所有链接的文件都复制到你在Visual Studio的Solution Explorer中放置链接的位置:
<Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
<Copy SourceFiles="%(Content.Identity)"
DestinationFiles="%(Content.Link)"
SkipUnchangedFiles='true'
OverwriteReadOnlyFiles='true'
Condition="'%(Content.Link)' != ''" />
</Target>
我在我的博客文章http://mattperdeck.com/post/Copying-linked-content-files-at-each-build-using-MSBuild.aspx中描述了这是如何工作的。
最终,我是这样实现的。可能不是每个人都喜欢,但对我很有效。
注意:在我们所有的项目中,静态资源都在名为'Assets'的根目录中,例如JavaScript始终位于 /Assets/js/,CSS则为/Assets/css/。
解决方案
当项目构建时,它会将导入的文件复制到 \bin\Assets\js - 然后,后期生成事件会将这些文件的副本复制到项目目录中,以供站点使用。
echo f | xcopy /Y /E "$(TargetDir)Content" "$(ProjectDir)Content"
,这样就可以防止在我的情况下出现“以代码X退出”的错误。 - robyawusing System.Web;
using System.Web.Optimization;
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/externalLibrary").Include(
"~/bin/scripts/externalLibrary.js"
));
}
}
然后您需要将此内容添加到global.asax文件中的Application_Start中(紧贴着注册路由的位置)
BundleConfig.RegisterBundles(System.Web.Optimization.BundleTable.Bundles);
<script type='text/javascript' src='@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/externalLibrary")'></script>
您需要安装 microsoft.aspnet.web.optimization 的 NuGet 包。
你可以尝试使用Visual Studio 模板。
本博客文章介绍了一种替代方案,以回答@beardtwizzle的问题:
思路相似:
因此,与其使用后期构建事件,不如通过修改构建步骤来复制文件。对我来说,这种解决方案感觉更加简洁(但这可能只是个人喜好问题)。无论如何,我刚刚将其添加到我们的解决方案中,目前运行良好!
使用适当的版本控制。
将js文件保存在一个位置,然后只需使用git pull
(或相应的Mercurial / Bazaar命令)将它们更新到您的代码中。
package_manager update
或类似的命令。 - Raynos