你能够将编译后的次第集复制到Web应用程序的Bin文件夹中,Roslyn是新出的动态编写翻译工具

作者:必赢网站

近期新进步了Visual Studio 2017,创立的Web项目Bin目录中多了二个叫roslyn的文本夹,该公文夹导致网址在少数服务器上发表出错

        若是你的Web应用程序包含要在多少个页之间分享的代码,您能够将代码保存在   Web   应用程序根目录下的五个独特文件夹(Bin文件夹和App_Code文件夹)中的某些文件夹中。   
    
        Bin文件夹   
        能够在Bin文件夹中贮存编译的程序集,并且Web应用程序任性处的另外代码(如页代码)会自行引用该公文夹。规范的身体力行是你为自定义类编写翻译好的代码。您能够将编写翻译后的次序集复制到Web应用程序的Bin文件夹中,那样有着页都可以接纳那些类。   
    
        Bin文件夹中的程序集无需注册。只要 .dll 文件存在于Bin文件夹中,ASP.NET就足以辨认它。借让你改造了.dll 文件,并将它的新本子写入到了Bin文件夹中,则ASP.NET会检查实验到履新,并对接着的新页诉求使用新本子的.dll文件。   
    
        Bin文件夹的安全性   
        将编写翻译后的程序集放入Bin文件夹中会带来平安危机。假设是你本人编排和编译的代码,那么你精通代码的效应。然而,您必须像对待其余可试行代码同样来比较Bin文件夹中已编写翻译的代码。在做到代码测量检验并坚信已精晓代码效用之前,要对已编写翻译的代码保持严慎的情态。   
    
        请稳重以下安全方面包车型地铁学问,那些文化与是还是不是将已编写翻译的代码放入Bin 文件夹有关:   
        Bin文件夹中等射程序集的功力范围为当下应用程序。因而,它们不可能访谈当前Web应用程序之外的财富或调用当前Web应用程序之外的代码。   
        运维时,程序集的拜候级别由本地计算机上点名的相信等级鲜明。有关越来越多新闻,请参见ASP.NET信赖等第和政策文件。   
        假诺您使用了比方Visual Studio 那样的设计器,那么Bin文件夹中的代码运转所在的上下文与运营时不相同。比如,代码只怕以完全相信状态运营。     
    
        App_Code   文件夹   
        可以在App_Code文件夹中累积源代码,在运维时将会自行对那个代码实行编译。Web   应用程序中的别的任何代码都得以访谈发生的主次集。因而,App_Code文件夹的专门的工作措施与Bin文件夹很类似,分化之处是你能够在内部存款和储蓄源代码而非已编写翻译的代码。App_Code 文件夹及其在ASP.NET Web应用程序中的特殊位置使您能够创造自定义类和另外仅源代码文件,并在Web应用程序中使用它们而没有要求单独对它们实行编写翻译。   
    
        App_Code文件夹能够分包以理念类公事(即带有.vb、.cs等扩张名的文本)的花样编写的源代码文件。但是,它也足以包涵实际不是泾渭分鲜明示出由某风姿洒脱特定编制程序语言编写的公文。比如.wsdl(Web服务意识语言)文件和XML框架结构(.xsd)文件。ASP.NET可以将这几个文件编写翻译成程序集。   
    
        依照你的内需,App_Code文件夹可以富含自由数量的公文和子文件夹。您能够使用此外你以为福利的议程协会源代码,ASP.NET仍会将装有代码编译成单个程序集,并且Web应用程序肆意处的别样代码都得以访谈该程序集。   
    
        推断App_Code文件夹的编制程序语言   
        App_Code文件夹并未显式标志为含有以其他后生可畏种编制程序语言编写的文本。相反,ASP.NET是依靠App_Code文件夹所蕴藏的文书来推论应该为App_Code文件夹调用哪一种编写翻译器。要是  App_Code文件夹满含.vb文件,则ASP.NET使用Visual Basic编译器;若是包罗.cs文件,则ASP.NET使用C#编写翻译器,就那样类推。   
    
        如果App_Code文件夹只含有并未有鲜明标记编制程序语言的公文(如.wsdl文件),则ASP.NET将选拔Web应用程序的暗中认可编写翻译器,暗中认可编写翻译器在Web应用程序或Computer配置文件的compilation成分中明显。   
    
        在App_Code文件夹中应用多样编制程序语言   
        因为App_Code文件夹中的源代码要编写翻译成单个程序集,所以App_Code文件夹中的全部文件必得使用一样的编制程序语言编写。举例,App_Code文件夹不能并且包涵选拔Visual Basic和C#编纂的源代码。     
    
        但是,您能够对Web应用程序进行布署,使其将App_Code文件夹的子文件夹作为单身的可编写翻译单元管理。那样,每二个文书夹就足以分包以差别编制程序语言编写的源代码。通过在Web.config文件的codeSubDirectories成分中开创二个compilation成分,然后增加一个对子文件夹的引用,就可以钦赐该配置。上边包车型地铁亲自去做阐释怎么着对名称叫VBCode和CSCode的子文件夹举行配备,使其编译成差异的主次集:  
   
    复制到剪贴板<compilation   debug="false">  
          <codeSubDirectories>  
                  <add   directoryName="VBCode"   />  
                  <add   directoryName="CSCode"   />  
          </codeSubDirectories>  
  </compilation>   
        请小心,对VBCode和CSCode子文件夹的引用并未包涵其余有一点子文件夹中所满含的编制程序语言的新闻。就好像对待App_Code文件夹自身同样,ASP.NET会依照子文件夹中的文件来测度要选用的编译器。   
    
        App_Code 文件夹的安全性   
        App_Code

必赢体育 1

文件夹中的代码存在的平安难题相当多与Bin文件夹中的代码存在的安全难点同样

代码都会在运营时编写翻译成程序集。比Bin文件夹要好有的的是,您能够翻阅App_Code文件夹中文件的源代码。不过,假若您无法完全驾驭代码,仍旧会设有安全危机。由此,对待App_Code 文件夹中的源代码的姿态必得像对待基于一样的源代码生成的已编写翻译代码同样寻行数墨。


        ASP.NET 2.0 引入了 App_Code 目录,该目录能够包括部分独门文件,这个文件包涵要在应用程序中的八个页之间分享的代码。与 ASP.NET 1.x 差异 (1.x 须求将那几个文件预编写翻译到 Bin 目录),App_Code 目录中的全部代码文件都就要运维时动态编写翻译,然后提须求应用程序。能够在 App_Code 目录下放置五种语言的文本,前提是将这一个文件划分到各子目录中(在 Web.config 中用特定语言注册那一个子目录)。暗中同意情况 下,App_Code 目录只好分包同后生可畏种语言的文本。但足以将 App_Code 目录划分为若干子目录(各类子目录包罗同一语言的文本)以便能够在 App_Code 目录下包括各类语言。为此,必要在应用程序的 Web.config 文件中登记各类子目录。
<configuration>
   <system.web>
     <compilation>
       <codeSubDirectories>
         <add directoryName="Subdirectory"/>
       </codeSubDirectories>
     </compilation>
   </system.web>
</configuration>

        以上是有关 App_Code 的合法描述。描述中关系“运营时动态编写翻译”,为了澄清楚 App_Code 目录下的文件在哪天编写翻译,于是写了段程序实行测量检验

TestClass.cs

 1必赢体育 2public class TestClass
 2必赢体育 3必赢体育 4必赢体育 5{
 3必赢体育 6  public static int m_Count = 0;
必赢体育, 4必赢体育 7  public TestClass()
 5必赢体育 8必赢体育 9   必赢体育 10{
 6必赢体育 11     m_Count++;
 7必赢体育 12   }
 8必赢体育 13  public string GetMessage(string str)
 9必赢体育 14必赢体育 15   必赢体育 16{
10必赢体育 17     "Hello : " + str;
11必赢体育 18   }
12必赢体育 19}
13必赢体育 20

ASPX 页中的代码

必赢体育 21必赢体育 22<%必赢体育 23TestClass t = new TestClass();%>
必赢体育 24<%=t.GetMessage("SoftDiyer")%><br>
必赢体育 25m_Count=<%=TestClass.m_Count%>

        在多个 ASPX (Test1.aspx 和 Test2.aspx)页中放了那个代码,先拜访Test1.aspx   , m_Count=1; 然后再探望 Test2.aspx m_Count=2;修改 TestClass.cs 中的内容重新访谈 Test2.aspx , m_Count =1;因此来看 .net 框架在监视 App_Code 目录,当目录中的文件产生变化时,触发 .net 的动态编写翻译。

        App_Code 、 Asp 的 Include 、.Net 中的 Import 的比较:
        App_Code 与asp 中的 include 不同:App_Code 接受编写翻译机制而 asp 中的 include 选用的是解说的编制,表面上看贯彻的目标和议程有一点类似,不过管理情势完全两样。使用代码目录格局使程序变的更迅捷更易于保证。
        App_Code 和 Import 的不等:从调用代码看分歧在于,使用 Import 时必需在文件中使用 Import 语句,而代码目录情势无需。使用 Import 语句日常是行使已经编译好的类,在运作早先早就编写翻译好了。而代码目录则在运转时编写翻译,那样就大增了程序的油滑。

 

从英特网搜寻了一晃,Roslyn是新出的动态编写翻译工具

必赢体育 26

 

然则在服务器上安装.net4.6后还是提示编写翻译出错。

焚薮而田措施:打开技术方案NuGet包管理器,卸载多少个叫“Microsoft.CodeDom.Providers.DotNetCompilerPlatform”的包,之后重新编译网址,开采Bin目录下未有roslyn文件夹了!

本文由必赢体育发布,转载请注明来源

关键词: