我看不出Windows如何允许您在没有选择的情况下更改应用程序的配置,而只能在web.config (或app.config)中保存配置设置。
例如..。
很多时候,项目都会使用大量使用web.config的第三方库。web.config的使用可能涉及连接字符串、应用程序设置或自定义配置部分。ELMAH就是一个很好的例子。ELMAH的web.config文件可能如下所示:
<configuration>
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
</sectionGroup>
</configSections>
<connectionStrings>
<add
name="MyElmahDatabase"
providerName="System.Data.SqlClient"
connectionString="Server=tcp:myServer.database.windows.net,1433;Database=myDB;User ID=user@myServer;Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30" />
</connectionStrings>
<elmah>
<security allowRemoteAccess="1" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="MyElmahDatabase" />
</elmah>
</configuration>这里有几个问题:
这是因为web.config被打包成.cspkg文件,并且ELMAH不会查看服务配置设置(这是我可以在服务配置之间更改配置设置的唯一方法)。
我能想到许多其他的例子,这是一个问题.
...to的名字只有两个。
我是遗漏了什么,还是说这是Windows提供的配置管理中的一个重大差距?
编辑
从下面的答案和评论来看,这似乎不是很好的支持。我认为管理多个解决方案构建配置以支持不同的配置配置文件是一个非常弱的解决方案。我不需要为我需要的每个配置配置重新构建解决方案(可能会有相当多的配置文件)。编译不等于配置。
我想知道是否有一种方法来修改.cspkg文件,因为它只是一个zip文件。根据这文档,您可以在Linux上使用。
我查看了.cspkg文件中的清单,它如下所示:
<PackageManifest version="2">
<Encryption keytype="1" />
<Contents hashtype="1">
<Item name="MyApp.Web.UI_<GUID>.cssx" hash="AED69299C5F89E060876BC16BD3D6DE5130F6E62FFD2B752BAF293435339B7E2" uri="/MyApp.Web.UI_<GUID>.cssx" />
<Item name="MyApp.Web.Services_<GUID>.cssx" hash="7AC81AFF642E4345173C8470C32A41118A4E3CFD4185B82D0ADA44B71057192D" uri="/MyApp.Web.Services_<GUID>.cssx" />
<Item name="SMPackage_<GUID>.csmx" hash="B5E6B83B62AF64C7C11CAC1A394ABBF15D7DB7667A773C5284CE5BE95C5834E9" uri="/SMPackage_<GUID>.csmx" />
<Item name="SDPackage_<GUID>.csdx" hash="F34B7C02A551D82BAD96881E2DA9447D0014D49B47CCB3840475BDC575234A7D" uri="/SDPackage_<GUID>.csdx" />
<Item name="NamedStreamPackage_<GUID>.csnsx" hash="FA2B5829FF5D9B2D69DCDDB0E5BDEE6B8B0BC09FFBF37DAEEE41CF3F3F4D0132" uri="/NamedStreamPackage_<GUID>.csnsx" />
</Contents>
<NamedStreams>
<Stream name="RequiredFeatures/MyApp.Web.Services/1.0" />
<Stream name="RequiredFeatures/MyApp.Web.UI/1.0" />
<Stream name="SupportData/MyApp.Web.Services/1.0" />
<Stream name="SupportData/MyApp.Web.UI/1.0" />
</NamedStreams>
</PackageManifest>不幸的是,如果我重新计算未更改的"MyApp.Web.UI_.cssx“文件的散列,则我的散列不同于清单中的哈希。
散列清单: AED69299C5F89E060876BC16BD3D6DE5130F6E62FFD2B752BAF293435339B7E2
我的计算哈希: E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
注意,我还没有更改文件,所以散列应该是相同的。
这表明我估计错了。我的方法如下:
class Program
{
static void Main(string[] args)
{
using (FileStream fs = new FileStream(args[0], FileMode.Open))
{
ComputeHash(new SHA256Managed(), fs);
}
}
private static void ComputeHash(HashAlgorithm hashAlgorithm, Stream stream)
{
byte[] hash = hashAlgorithm.ComputeHash(stream);
string hashString = BitConverter.ToString(hash);
Console.WriteLine(hashString.Replace("-", string.Empty));
Console.WriteLine();
}
}上面的文档链接表明重新计算散列(无论如何在Linux上)是很简单的。
有人知道怎么重新计算散列吗?
发布于 2013-03-27 15:32:06
将Stream传递给ComputeHash(),与使用byte[]重载相比,最终会产生不同的哈希。我也不知道原因。
试一试如下:
private static void ComputeHash(HashAlgorithm hashAlgorithm, Stream stream)
{
BinaryReader reader = new BinaryReader(stream)
byte[] hash = hashAlgorithm.ComputeHash( reader.ReadBytes( (int)stream.Length ) );
string hashString = BitConverter.ToString(hash);
Console.WriteLine(hashString.Replace("-", string.Empty));
Console.WriteLine();
}这会给你你想要的哈希。
正如您可能已经发现的,在linux上您可以使用
openssl dgst -sha256 /path/to/file发布于 2012-07-18 19:11:30
我您的web.config中有您想要更改的项目,这取决于它是如何构建的,您可以使用在Azure之外的解决方案。您可以使用Web.config变换。这些转换与构建配置相关联,而不是服务配置,但是服务配置可能与构建配置密切相关(...Local.csfg -> Debug,...Cloud.csfg ->版本)。如果默认的构建配置不适用于您,只需创建所需的配置即可。
如果希望在每个服务配置中使用不同的服务定义,则UI不支持它,但可以使用处理构建过程以使其正常工作
https://stackoverflow.com/questions/11539204
复制相似问题