2013-09-25 39 views
1

在ASP.NET MVC 4项目ASP.NET MVC参考脚本文件,我想引用一个版本的脚本文件是这样的:配版通配符(不绑定)

// Just some pseudo-code: 
<script src="@Latest("~/Scripts/jquery-{0}.min.js")"></script> 

// Resolves to the currently referenced script file 
<script src="/Scripts/jquery-1.10.2.min.js"></script> 

,这样当新的脚本版本通过NuGet更新,引用会自动更新。我知道bundling-and-minification feature,但它只是很多。我只想要解决通配符的小部分。我的文件已经被缩小了,我也不想要这些软件包。

你有一些聪明的想法如何解决这个问题?

+2

使用捆绑包,创建一个新的捆绑包中有一个文件(jQuery),就是这样。 – Aviatrix

+0

@Aviatrix这看起来很实用,但我认为使用称为“捆绑和缩小”的功能没有任何实际的捆绑需求并且没有什么可以缩小。那么这是一个相当高的开销,不是吗? – thmshd

+1

如果您使用它,它已经在那里。我怀疑这是内部缓存,所以开销应该接近于零。你总是有选择写你需要的工具:) – Aviatrix

回答

3

尽管在MVC中使用Bundling有点过度,但我认为这将是您最好的选择。它已经被完成并被验证,所以为什么花更多的时间来编写一些专有代码。

这就是说,如果你想要一个简单的样本,你可以做什么,那么你可以尝试以下。

public static class Util 
{ 
    private const string _scriptFolder = "Scripts"; 

    public static string GetScripts(string expression) 
    { 
     var path = HttpRuntime.AppDomainAppPath; 
     var files = Directory.GetFiles(path + _scriptFolder).Select(x => Path.GetFileName(x)).ToList(); 
     string script = string.Empty; 
     expression = expression.Replace(".", @"\.").Replace("{0}", "(\\d+\\.?)+"); 
     Regex r = new Regex(@expression, RegexOptions.IgnoreCase); 

     foreach (var f in files) 
     { 
      Match m = r.Match(f); 
      while (m.Success) 
      { 
       script = m.Captures[0].ToString(); 

       m = m.NextMatch(); 
      } 
     } 

     return script; 
    } 
} 

这将返回您脚本导演中的最后一个匹配或它将返回空字符串。

使用此电话

@Html.Raw(MvcApplication1.Util.GetScripts("jquery-{0}.min.js")) 

会得到你这样的结果,如果是1.8.2符合您的字符串的最后一个文件。

jquery-1.8.2.min.js 

希望这会帮助你开始。

+0

非常好,谢谢你提供,你的个人意见和建议,但也是一个解决方案脚本。 – thmshd