相关疑难解决方法(0)

等到文件在.NET中解锁

在文件解锁并且可以读取和重命名之前,阻塞线程的最简单方法是什么?例如,.NET Framework中的某个地方是否存在WaitOnFile()?

我有一个服务,使用FileSystemWatcher查找要传输到FTP站点的文件,但文件创建事件在另一个进程写完文件之前触发.

理想的解决方案将有一个超时期限,因此线程在放弃之前不会永久挂起.

编辑:在尝试下面的一些解决方案后,我最终更改系统,以便所有文件写入Path.GetTempFileName(),然后执行File.Move()到最终位置.一旦FileSystemWatcher事件被触发,该文件就已经完成.

.net file .net-3.5

94
推荐指数
5
解决办法
7万
查看次数

覆盖ASP.NET MVC活动样式表包

我的应用程序中有一个样式表~/Content/theme/style.css.它在我的应用程序中使用标准捆绑引用:

bundles.Add(new StyleBundle("~/Content/css").Include(
 "~/Content/font-awesome/font-awesome.css",
 "~/Content/theme/style.css"));
Run Code Online (Sandbox Code Playgroud)

现在,我使用Sass编译器(Libsass)允许我根据需要将输出style.css文件更改为自定义用户输出文件.

所以基本上我做这样的事情.

CompilationResult compileResult = SassCompiler.CompileFile(Server.MapPath(Path.Combine(WebConfigSettings.RootSassPath, "style.scss"), options: new CompilationOptions {
    SourceMap = true,
    SourceMapFileUrls = true
});
Run Code Online (Sandbox Code Playgroud)

然后我像这样保存.

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);
Run Code Online (Sandbox Code Playgroud)

但是间歇性地我收到以下可怕的访问错误:"进程无法访问文件C:....\style.css",因为它正被另一个进程使用."(注意:这发生在该File.WriteAllText行)

这没有意义,因为我没有打开任何流到文件并执行我认为是单个原子操作使用File.WriteAllText.

现在我也注意到,当我使用两个不同的浏览器连续修改这个文件时,这个错误特别可能.

我的假设是发生了两件事之一.

或者:

一个.捆绑打包程序以某种方式锁定文件,因为它在更新捆绑包时没有释放锁定或已修改

因为两个不同的连接以某种方式访问​​文件,所以它们会持续存在.

那么,有没有人碰到类似的东西?关于我如何能够解决这个问题的任何建议?

PS:我尝试使用HttpRuntime.UnloadAppDomain();hacky方式尝试释放文件上的任何锁,但这似乎没有帮助.

c# asp.net asp.net-mvc sass libsass

5
推荐指数
1
解决办法
277
查看次数

标签 统计

.net ×1

.net-3.5 ×1

asp.net ×1

asp.net-mvc ×1

c# ×1

file ×1

libsass ×1

sass ×1