我有一个网络角色,我已将RoleEntryPoint
扩展到做一些超出网站范围的工作。作为RoleEntryPoint.Run()
的一部分,我需要使用ConfigurationManager
从.config中读取代码。
虽然这有点不寻常,但使用SDK 1.8我能够确保我的软件包包含[我的项目名称] .dll.config文件。
现在,当我尝试使用.AppSettings
或.GetSection()
时,我已升级到SDK 2.2,但值始终为null,这使我相信它无法找到我的文件。
我尝试过部署工作者角色,而.config文件仍然遵循我目前使用的相同名称模式。
我也尝试过命名文件WaIISHost.exe.config。
我知道理想情况下,这个配置应该包含在.csfg文件中,但我的问题是有人知道我应该调用我的配置文件吗?
更新:
在this question的帮助下,我现在知道它正在读取的配置文件的名称是E:\ base \ x64 \ WaIISHost.exe.Config,但我不知道为什么这有改变了,或者我能做些什么来掩盖这一点。
答案 0 :(得分:3)
经过多次调查和试验后,我终于找到了一个解决方案。
文件的名称仍然是[我的项目名称] .dll.config,但您需要确保此文件位于软件包的approot \ bin \目录中。
我认为我的初始问题是由Copy to Output Directory
属性更改为Do Not Copy
引起的,尽管我不确定这是怎么发生的。如果您发现自己处于类似情况,只需将具有正确名称的文件添加到项目中,并将Copy to Output Directory
设置为Copy 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目录中,并使用正确的名称。
答案 1 :(得分:1)
您是否可以将配置值放入Azure配置文件(.cscfg
)而不是使用.config
文件?您可以通过cscfg
静态方法从RoleEnvironment.GetConfigurationSettingValue
读取值。
答案 2 :(得分: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角色项目的属性。