Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 视图在更改后不刷新_C#_Asp.net Mvc_Razor_Visual Studio 2015 - Fatal编程技术网

C# 视图在更改后不刷新

C# 视图在更改后不刷新,c#,asp.net-mvc,razor,visual-studio-2015,C#,Asp.net Mvc,Razor,Visual Studio 2015,我遇到了这个令人沮丧的问题。我在razor视图(cshtml)中更改文本,不调试启动,刷新(Ctrl+F5)浏览器,但什么也没发生。奇怪的是,如果我修改控制器的返回值(比如returnok(“test”);)或包含的静态文件(比如CSS),刷新,更改是可见的。只有每次停止调试时,razor视图才会更新 以下是我已经尝试过的东西: 确保选中了“在环境外部更改文件时检测” 在运行时,当项目过期时是始终生成 在Edge、Chrome和Firefox上进行了尝试,无论是否进行了硬刷新 重新启动Visu

我遇到了这个令人沮丧的问题。我在razor视图(cshtml)中更改文本,
不调试启动
,刷新(Ctrl+F5)浏览器,但什么也没发生。奇怪的是,如果我修改控制器的返回值(比如
returnok(“test”);
)或包含的静态文件(比如CSS),刷新,更改是可见的。只有每次停止调试时,razor视图才会更新

以下是我已经尝试过的东西:

  • 确保选中了“在环境外部更改文件时检测”
  • 在运行时,当项目过期时
    始终生成
  • 在Edge、Chrome和Firefox上进行了尝试,无论是否进行了硬刷新
  • 重新启动Visual Studio数字时间
  • 清洁/重建解决方案
  • 在新模板项目上执行此操作
另外,我看到有很多类似的问题,但是没有一个答案能解决我的问题

更新

这似乎是一个规模更大的问题。如果我:

  • 在父视图中创建所需的razor部分,如下所示
    @RenderSection(“css”,required:true)
  • 不在子视图中实现渲染
  • 我(显然)得到了
    invalidoOperationException:以下部分已经定义,但还没有被“bla\bla\bla”页面呈现:css
  • 然后我实施它
  • 保存,在Firefox中按Ctrl+F5。错误仍然存在

  • 在这一点上,VS 2015实际上是不可用的,因为你不知道,如果你真的错过了什么,或者它是VS表现出来的

    以下是在幕后发生的事情:.net framework将你的razor编译成一个机器形式(DLL)并执行它。然后,它监视您的web文件夹以监视更改,当它检测到更改时,它会重新编译您的razor并执行新的DLL

    在您的情况下,与监视文件更改相关的某些操作似乎失败了。它在完全重新启动时仍然有效,因为即使没有检测到文件更改,也会进行编译。常见的原因有:

  • 您正在通过网络(NAS或文件共享)提供文件,该网络不允许您的电脑监视更改。这可能是缺少功能(如非SMB文件共享)或权限问题。这在web场场景中非常常见,但可能不是您的开发场景
  • 其他东西已经锁定了文件(权限?),这会阻止此监视挂钩保留文件

  • 要确认这是问题所在,我建议只编辑web.config(添加/删除字符),然后查看重新加载是否成功-只是为了证明这是重新编译问题,而不是visual studio调试问题。假设是这种情况,并且假设它不是NAS,我建议暂时给文件夹一个“everyone-everything”权限,看看它是否工作,然后再逐渐将权限降低到您想要的位置

    检查您的
    web.config
    并确保您没有
    fcnMode=“Disabled”
    fcnMode=“NotSet”

    使用

    
    

    
    
    • 默认值对于每个子目录,应用程序都会创建一个监视子目录的对象。这是默认行为
    • 已禁用文件更改通知已禁用
    • NotSet未设置文件更改通知,因此应用程序将创建一个监视每个子目录的对象。这是默认设置 行为
    • Single应用程序创建一个对象来监视主目录,并使用此对象监视每个子目录

    也有同样的问题。经过长时间的调试并尝试了几乎所有的方法之后,我们发现有人在VisualStudio中将文件从一个文件夹移动到了另一个文件夹,并将其签入TFS。因此,项目文件已更新,但原始文件仍存在于磁盘上。因此,我的本地IIS在新位置呈现旧文件而不是新文件

    这是令人沮丧的,是的。

    我以前有过这个问题。 我的案例是我在Macbook Pro上运行windows 10 VM并行,项目文件位于mac OS的共享文件夹中


    如果有人和我有同样的情况,将项目移动到非共享目录,如C:\将解决此问题。

    如果您使用Parallels WM在Mac上运行,并且您的项目位于Mac卷上,您可以使用chmod解决此问题

    chmod -R 777 *
    

    有两种方法可以解决此问题:

    1。请检查存在.sln文件的文件夹的权限。文件访问权限可能有问题,因为在IIS express server运行时Visual studio可能无法访问文件,因此为了在每次需要重新启动服务器时反映新的.cshtml更改,我建议通过以下方式编辑文件夹访问权限:

    右键单击文件夹->属性->安全->单击编辑按钮->检查所有选项->保存

    重新启动Visual studio以查看更改

    如果这不起作用,则使用2选项

    2。在startup.cs文件中的项目中,在方法中的ConfigureServices()下一行添加以下内容:

    services.AddMvc().AddRazorOptions(options=>options.allowReciplingViewsOnFileChange=true)


    在并行虚拟机上,在Macbook Pro上,如果项目文件位于共享文件夹中,则重新编译机制将不起作用;
    将文件夹复制到驱动器C,问题将得到解决

    是否打开缓存?我已关闭浏览器中的缓存,并始终使用Ctrl+F5强制执行干净的重新加载,如果这是您的意思。不,我指的是服务器上的缓存。操作方法上有属性,或者您可以使用处理程序使服务器
    <httpRuntime targetFramework="4.5.2" fcnMode="Single" />
    
    chmod -R 777 *