0

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

<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>

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

那么,如何在 providerOption 元素完好无损的情况下将我的网站发布到 IIS 7.5?

4

1 回答 1

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 正在按预期工作,所以我很想将其称为解决方案。

于 2012-10-02T18:53:27.183 回答