.net 您是如何使用Machine.config的?

.net 您是如何使用Machine.config的?,.net,asp.net,deployment,configuration,.net,Asp.net,Deployment,Configuration,对于ASP.Net应用程序部署,您将在machine.config中存储什么类型的信息(如果有) 如果您不使用它,如何管理每个环境可能更改的特定于环境的配置设置 我正在寻找一些“最佳实践”以及每种实践的优点/缺点。我们将在两个月内将一个全新的应用程序部署到生产环境中,我在这类决策中有一定的自由度。我想确保我以最好的方式处理事情,并试图避免在以后的日子里射中自己的脚 仅供参考,我们目前仅将其(machine.config)用于数据库连接信息,并将可能在数据库的配置表中更改的所有其他变量存储在数据库

对于ASP.Net应用程序部署,您将在machine.config中存储什么类型的信息(如果有)

如果您不使用它,如何管理每个环境可能更改的特定于环境的配置设置

我正在寻找一些“最佳实践”以及每种实践的优点/缺点。我们将在两个月内将一个全新的应用程序部署到生产环境中,我在这类决策中有一定的自由度。我想确保我以最好的方式处理事情,并试图避免在以后的日子里射中自己的脚


仅供参考,我们目前仅将其(machine.config)用于数据库连接信息,并将可能在数据库的配置表中更改的所有其他变量存储在数据库中。

我使用machine.config不仅用于ASP.NET,还用于整体配置。我在C#中实现了一个哈希算法(Tiger),并希望它能够通过机器请求获得。因此,在GAC中注册了我的程序集,并将以下内容添加到machine.config中:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <mscorlib>
        <cryptographySettings>
            <cryptoNameMapping>
                <cryptoClasses>
                    <cryptoClass Tiger192="Jcs.Tiger.Tiger192, Jcs.Tiger, Culture=neutral, PublicKeyToken=66c61a8173417e64, Version=1.0.0.4"/>
                    <cryptoClass Tiger160="Jcs.Tiger.Tiger160, Jcs.Tiger, Culture=neutral, PublicKeyToken=66c61a8173417e64, Version=1.0.0.4"/>
                    <cryptoClass Tiger128="Jcs.Tiger.Tiger128, Jcs.Tiger, Culture=neutral, PublicKeyToken=66c61a8173417e64, Version=1.0.0.4"/>
                </cryptoClasses>
                <nameEntry name="Tiger" class="Tiger192"/>
                <nameEntry name="TigerFull" class="Tiger192"/>
                <nameEntry name="Tiger192" class="Tiger192"/>
                <nameEntry name="Tiger160" class="Tiger160"/>
                <nameEntry name="Tiger128" class="Tiger128"/>
                <nameEntry name="System.Security.Cryptography.HashAlgorithm" class="Tiger192"/>
            </cryptoNameMapping>
            <oidMap>
                <oidEntry OID="1.3.6.1.4.1.11591.12.2" name="Jcs.Tiger.Tiger192"/>
            </oidMap>
        </cryptographySettings>
    </mscorlib>
</configuration>

我的代码中完全不依赖Jcs.Tiger.dll程序集,无论是硬的还是软的。

我们正在考虑使用machine.config为环境添加一个键,然后在web.config中有一个部分,这对于所有环境都是完全相同的。这样我们就可以进行“真正的”XCopy部署

例如,在每台计算机(本地开发工作站、后台服务器、构建服务器、生产服务器)的machine.config中,我们将添加以下内容:

<appSettings>
    <add key="Environment" value="Staging"/>
</appSettings>

然后,任何特定于环境的配置元素都会附加环境,如下所示:

<connectionStrings>
    <add name="Customers.Staging" provider="..." connectionString="..."/>
</connectionStrings>
<appSettings>
    <add key="NTDomain.Staging" value="test.mydomain.com"/>
</appSettings>

我们没有解决方案的一个问题是,如何在web.config中为调试环境而不是实时环境启用say跟踪


另一个问题是,包含用户名和密码的live connectionstring现在位于源代码管理系统中。但是,这对我们来说不是问题。

我们在生产服务器上使用machine.config来设置/删除对生产非常重要的特定配置,我们永远不会忘记设置它们

以下是最重要的两个方面:

<system.web>
    <deployment retail="true" />
    <healthMonitoring enabled="true" />
</system.web> 

如果您对服务器进行负载平衡,则必须确保所有服务器上的机器密钥都相同。Viewstate应该是服务器不可知的,但事实并非如此,因此如果服务器间的机器密钥不同,则会出现Viewstate损坏错误

<machineKey validationKey='A130E240DF1C49E2764EF8A86CEDCBB11274E5298A130CA08B90EED016C0
14CEAE1D86344C29E67E99DF83347E43820050A2B9C9FC89E0574BF3394B6D0401A9'
decryptionKey='2CC37FFA8D14925B9CBCC0E3B1506F35066FEF33FEB4ADC8' validation='SHA1'/>

发件人:


PS您当然可以启用ViewStateMac=“false”,但不要这样做。

已经这样做5年多了。太棒了。
<machineKey validationKey='A130E240DF1C49E2764EF8A86CEDCBB11274E5298A130CA08B90EED016C0
14CEAE1D86344C29E67E99DF83347E43820050A2B9C9FC89E0574BF3394B6D0401A9'
decryptionKey='2CC37FFA8D14925B9CBCC0E3B1506F35066FEF33FEB4ADC8' validation='SHA1'/>