用于C#的AWS sdk,在哪里放置App.config文件?

时间:2013-11-29 19:55:36

标签: c# amazon-web-services amazon-s3

所以我有一个C#控制台应用程序,可以将文件上传到s3存储。

当我从Visual Studio内部调试它时工作正常,但是,当我构建.exe并从我的服务器运行它时,我得到错误,说它无法在App.config文件中找到Access Key。

System.ArgumentException: Access Key could not be found.  Add an appsetting to your App.config with the name AWSAccessKey with a value of your access key.

还有:

Amazon.Runtime.AmazonServiceException: Unable to reach credentials server

第二个错误可能是由第一个错误造成的。

我将我的App.config文件放在与我正在运行的.exe相同的目录中,但这没有帮助。

我还需要做什么?

这是我的App.config文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="AWSAccessKey" value="key"/>
    <add key="AWSSecretKey" value="secret"/>
    <add key="AWSRegion" value="us-west-2" />
  </appSettings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

此文件的构建操作是“嵌入式资源”我还尝试将其更改为“内容”,但没有帮助。


可能相关或不相关的一些事情:

我正在使用ILMergeAWSSDK.dll(以及其他)合并到exe中,然后通过命令行从Amazon EC2实例运行该文件。

2 个答案:

答案 0 :(得分:3)

需要考虑的事项,无论是针对此特定问题还是未来,如果您创建IAM角色,为其分配一组权限,然后启动具有该IAM角色的EC2实例,则访问密钥将自动提供给SDK并且您不必冒险将它们存储在配置文件中,就像您现在所做的那样。

http://aws.typepad.com/aws/2012/06/iam-roles-for-ec2-instances-simplified-secure-access-to-aws-service-apis-from-ec2.html

答案 1 :(得分:2)

当您查看“bin”目录时,.config文件应命名为yourprogram.exe.config。否则它将找不到配置值,它应该是内容文件,而不是嵌入式资源。 .config文件必须始终存在并与EXE位于同一目录中。