C# 是否可以在当前appdomain/trace output to ASP页面中运行roslyn输出?

C# 是否可以在当前appdomain/trace output to ASP页面中运行roslyn输出?,c#,asp.net,roslyn,C#,Asp.net,Roslyn,我被要求调查一个目前不工作的实时客户端站点。我被告知,IIS回收将修复此问题约3个月,然后它将再次出现。问题似乎出现在第三方CMS中,但我目前无法提供任何调试信息供他们尝试和复制 这让我想知道是否有可能做到以下几点-将一个简单的ASP页面与一个可以接受任意输入的文本编辑器组合在一起。获取输入并使用Rosyln服务在当前应用程序域中编译/执行,然后将任何输出打印到页面上的另一个文本区域 有人能告诉我这是否可行吗?我不确定我是否能实现以下几点: 在当前页面/应用程序域的上下文中运行Roslyn代码

我被要求调查一个目前不工作的实时客户端站点。我被告知,IIS回收将修复此问题约3个月,然后它将再次出现。问题似乎出现在第三方CMS中,但我目前无法提供任何调试信息供他们尝试和复制

这让我想知道是否有可能做到以下几点-将一个简单的ASP页面与一个可以接受任意输入的文本编辑器组合在一起。获取输入并使用Rosyln服务在当前应用程序域中编译/执行,然后将任何输出打印到页面上的另一个文本区域

有人能告诉我这是否可行吗?我不确定我是否能实现以下几点:

  • 在当前页面/应用程序域的上下文中运行Roslyn代码
  • 跟踪输出到页面而不打开全局跟踪

加载动态程序集时,默认情况下,无论是否使用Roslyn,它都会将其加载到正在运行的同一AppDomain中

但是,有一些考虑因素:

  • 您不需要Roslyn服务(脚本引擎使用),如果您只是要构建和运行代码,则只需要Roslyn客户端DLL
  • 您并不需要Roslyn来编译动态代码并运行它。NET已经具备加载、编译和运行任意代码块的能力。在页面中使用反射来加载和运行动态DLL
  • 如果您需要的是Roslyn脚本引擎,则需要Roslyn服务(充当主机)。该服务需要visual studio 2012。正如Daniel Mann在评论中指出的那样,这是不允许生产的
  • 通过IIS的内存泄漏通常是由给定的线程/请求引起的,而不是由应用程序域(或共享资源)上的操作引起的。您的动态代码(无论是Roslyn脚本引擎还是普通的旧动态程序集)将在发生泄漏的外部运行,因此我怀疑您是否会看到任何问题
  • 这让我害怕。直接在现场运行动态代码听起来非常危险。保护你自己 您可以在本地或类似于live的测试机上复制它吗?如果它只在一段较长的时间内发生,则可以使用模拟使用


    复制后,请使用类似的工具查看问题所在。

    Roslyn CTP已使用一年多,未获得生产使用许可。另外,我不知道使用Roslyn会有什么效果。在你的网站上运行一个探查器,这会让你对问题的根源有一些了解。嗨,谢谢你的详细回答。不幸的是,这是一个在未知情况下突然出现的问题,我们不相信它只是与时间有关。在不知道具体情况的情况下,可能需要几天的时间来尝试复制,我们甚至不确定问题出在我们的代码上(可能是CMS)。这实际上与内存泄漏无关,而是正在注册的自定义代码突然停止执行。您正在收集IIS日志或性能计数器吗?IIS日志将为您提供进入站点的所有请求,性能计数器将在对请求的答复到达错误点时通知您。然后,您可以匹配它们之间的时间,并找出问题是何时开始的。您需要让它们保持运行,但它们都不会真正喷出大量数据。