我在应用程序中有一个样式表~/Content/theme/style.css
。 它使用标准捆绑方式在我的应用程序中引用,如下所示:
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/font-awesome/font-awesome.css",
"~/Content/theme/style.css"));
现在,我使用Sass编译器(Libsass)来实现将输出的
style.css
文件更改为需要的自定义用户输出文件。所以基本上我做的就是这样。
CompilationResult compileResult = SassCompiler.CompileFile(Server.MapPath(Path.Combine(WebConfigSettings.RootSassPath, "style.scss"), options: new CompilationOptions {
SourceMap = true,
SourceMapFileUrls = true
});
然后我就像这样保存。
string outputPath = Server.MapPath(WebConfigSettings.ThemeOutputPath);
if (System.IO.File.Exists(outputPath))
System.IO.File.Copy(outputPath, string.Format("{0}.bak", outputPath), true);
System.IO.File.WriteAllText(Server.MapPath(WebConfigSettings.ThemeOutputPath), compileResult.CompiledContent);
然而,我偶尔会收到以下可怕的访问错误:“因为它正在被另一个进程使用”,(注意:这发生在
File.WriteAllText
行),这是没有意义的,因为我没有打开任何流到该文件,并且执行我认为是单个原子操作的File.WriteAllText
。现在我还注意到,当我使用两个不同的浏览器连续修改此文件时,这种错误特别容易发生。我的假设是有两件事情正在发生。要么:a.捆绑打包程序以某种方式锁定了该文件,因为在更新捆绑包时已对其进行了修改,而没有释放锁定;要么b.因为两个不同的连接访问该文件,所以锁定仍然存在。那么,有人遇到类似的情况吗?有什么建议可以帮助解决这个问题吗?PS:我尝试使用HttpRuntime.UnloadAppDomain();
作为一种hacky方法来尝试释放文件上的任何锁定,但这似乎并没有帮助。
style.css
文件吗?您可以在调用时编译Sass并将其注入捆绑包中。 - GGO