由于providerOptions元素,发布ASP.NET 3.5站点使Web.config保持空状态

时间:2012-10-01 20:10:06

标签: asp.net iis-7.5 asp.net-3.5 publishing-site

我正在尝试使用WebDAV将ASP.Net 3.5站点发布到IIS 7.5服务器,每次我执行配置文件时都会清空。罪魁祸首是在下面的代码中看到的providerOption elemet。

<system.codedom>
<compilers>
  <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="WarnAsError" value="false"/>
  </compiler>
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="OptionInfer" value="true"/>
    <providerOption name="WarnAsError" value="false"/>
  </compiler>
</compilers>

C:\ Windows \ System32 \ inetsrv \ config \ schema中的FX_schema.xml文件用于验证站点的Web.config,并且它不包含providerOptions作为XML的一部分。我可以通过添加以下内容来添加允许修改文件的内容:

 <collection addElement = "providerOption">
  <attribute name = "name" required = "true" isUniqueKey = "true" type = "string" />
  <attribute name = "value" required = "true" type = "string" />
 </collection>

但我没有任何权限写入架构文件。这也看起来像其他人应该看到的东西,并且发现了一些人的快速搜索。我看到的唯一选择是“只删除编码部分”,这意味着像LINQ这样的3.5内容将无法工作,因此这是一个非首发。

那么如何将我的网站发布到IIS 7.5并且providerOption元素保持不变?

1 个答案:

答案 0 :(得分:0)

好吧,因为我找不到具体的东西,所以我就去了,做了我认为可能解决的问题:我制作了自己的文件并将其放入模式文件中。我把它命名为ThreeFive.xml,并将其放在C:\ Windows \ System32 \ inetsrv \ config \ schema中。该文件的全部内容如下:

<configSchema>
    <sectionSchema name="system.codedom">
        <element name="compilers">
            <collection addElement="compiler" removeElement="remove" clearElement="clear">
                <attribute name="language" type="string" isCombinedKey="true" />
                <attribute name="extension" type="string" isCombinedKey="true" />
                <attribute name="type" type="string" />
                <attribute name="warningLevel" type="int" />
                <attribute name="compilerOptions" type="string" />
                <collection addElement="providerOption">
                  <attribute name="name" required="true" isUniqueKey="true" type="string" />
                  <attribute name="value" required="true" type="string" />
                </collection>
            </collection>
        </element>
    </sectionSchema>
</configSchema>

然后我发布了一个3.5站点,它从appconfig设置中检索信息并做了一些LINQ以确保配置和3.5生效。配置文件没有消隐,LINQ正在按预期工作,所以我很想把它称为解决方案。