Question: Planning to rewrite a complex, UI-heavy app so that its model is as cross-platform as reasonably possible. The research / reading I've done makes sense conceptually, but in terms of the model sending messages to the controller in some sort of cross-platform approach, I'm not seeing what a best practices approach would entail.

For example, the Model is changed via the Controller making calls to the Model's API. But the Model is then responsible for informing clients of its data that a change has taken place, so it needs to broadcast that back to the Controller -- which needs to inform the View(s).

But messaging approaches are going to be different for a controller written in C# or Objective-C++, right? Would one use signal to connect to the Controller, which would use platform-specific message communication with the View(s)?

Is there a standard, lightweight template that sets up these best practices for the platform-independent model operations?

Answer: 
I had the same problem and found out that I had some bundles that pointed to non-exisiting files using {version} and \* wildcards such as

```
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
    "~/Scripts/jquery-{version}.js"));

```

I removed all of those and the error went away.
Here's a quick class I wrote to make this easier. 

```
using System.Web.Hosting;
using System.Web.Optimization;

// a more fault-tolerant bundle that doesn't blow up if the file isn't there
public class BundleRelaxed : Bundle
{
    public BundleRelaxed(string virtualPath)
        : base(virtualPath)
    {
    }

    public new BundleRelaxed IncludeDirectory(string directoryVirtualPath, string searchPattern, bool searchSubdirectories)
    {
        var truePath = HostingEnvironment.MapPath(directoryVirtualPath);
        if (truePath == null) return this;

        var dir = new System.IO.DirectoryInfo(truePath);
        if (!dir.Exists || dir.GetFiles(searchPattern).Length < 1) return this;

        base.IncludeDirectory(directoryVirtualPath, searchPattern);
        return this;
    }

    public new BundleRelaxed IncludeDirectory(string directoryVirtualPath, string searchPattern)
    {
        return IncludeDirectory(directoryVirtualPath, searchPattern, false);
    }
}

```

To use it, just replace ScriptBundle with BundleRelaxed in your code, as in:

```
        bundles.Add(new BundleRelaxed("~/bundles/admin")
            .IncludeDirectory("~/Content/Admin", "*.js")
            .IncludeDirectory("~/Content/Admin/controllers", "*.js")
            .IncludeDirectory("~/Content/Admin/directives", "*.js")
            .IncludeDirectory("~/Content/Admin/services", "*.js")
            );

```