1

我有一个网络角色,我在其中扩展了RoleEntryPoint一些超出网站范围的工作。作为RoleEntryPoint.Run()我的代码的一部分,需要使用 .config 从 .config 中读取ConfigurationManager

虽然这有点不寻常,但使用 SDK 1.8,我能够通过确保我的包包含一个 [The name of my project].dll.config 文件来完成这项工作。

现在我在尝试使用时已升级到 SDK 2.2,.AppSettings或者.GetSection()值始终为空,这让我相信它无法找到我的文件。

我已经尝试部署一个 Worker Role,并且 .config 文件仍然遵循我当前使用的相同名称模式。

我也尝试过命名文件 WaIISHost.exe.config。

我知道理想情况下这个配置应该包含在 .csfg 文件中,但我的问题是有人知道我应该调用我的配置文件吗?

更新:

在这个问题的帮助下,我现在知道它正在读取的配置文件的名称是 E:\base\x64\WaIISHost.exe.Config,但我不知道为什么这会改变或我能做什么超越这一点。

4

3 回答 3

3

经过大量调查和尝试一个错误,我终于有了解决方案。

文件名仍然需要是[我的项目名称].dll.config,但你需要确保这个文件在你的包的approot\bin\目录下。

我相信我最初的问题是由Copy to Output Directory属性更改为引起的Do Not Copy,尽管我不确定这是怎么发生的。如果您发现自己处于类似情况,您只需将具有正确名称的文件添加到您的项目并将其设置Copy to Output DirectoryCopy Always.

一旦我这样做了,但我意识到我还有另一个问题。我需要 .config 文件在其上运行配置转换,而这并没有。为了解决这个问题,我更新了 .ccproj 文件,使其具有以下内容:

<PropertyGroup>
    <!-- The first two of these targets are what is defined in the base SDK 2.2 targets file.  When we upgrade we may need to look reassess this. -->
    <CopyRoleFilesDependsOn>
        CopyWebRoleFiles;
        CopyWorkerRoleFiles;
        CopyWebConfigToBin;
    </CopyRoleFilesDependsOn>
</PropertyGroup>
<Target Name="CopyWebConfigToBin">
    <!-- We need to copy the transformed Web.config to the bin directory so that the RoleEntryPoint has access to the config settings.-->
    <Message Text="Copy %(WebRoleReferences.OutputDir)Web.config tp %(WebRoleReferences.OutputDir)\bin\BackOffice.UI.dll.config" Importance="high" />
    <Copy SourceFiles="%(WebRoleReferences.OutputDir)Web.config" DestinationFiles="%(WebRoleReferences.OutputDir)bin\[Name of project].dll.config" />
</Target>

这会添加一个额外的目标,它会等待所有其他文件都被复制到适当的目录,然后选择 web.config 并将副本放入具有正确名称的 bin 目录中。

于 2013-11-08T02:49:22.893 回答
1

您是否能够将配置值放入 Azure 配置文件 ( .cscfg) 而不是使用该.config文件?cscfg您可以通过RoleEnvironment.GetConfigurationSettingValue静态方法从 中读取值。

于 2013-11-04T16:12:49.513 回答
0

这个页面解释了为什么它被称为 WaIISHost.exe.Config 以及你可以把它放在你的项目中的什么地方。 http://azure.microsoft.com/blog/2010/12/02/new-full-iis-capabilities-differences-from-hosted-web-core/

就像 knightpfhor 提到的,您也可以使用 [AssemblyName].dll.config 来放置这些配置。这取决于您项目的程序集名称,您可以检查您的 Web 角色项目的属性。

于 2014-07-31T09:26:35.857 回答