所以我有一个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>
此文件的构建操作是“嵌入式资源”我还尝试将其更改为“内容”,但没有帮助。
可能相关或不相关的一些事情:
我正在使用ILMerge
将AWSSDK.dll
(以及其他)合并到exe
中,然后通过命令行从Amazon EC2实例运行该文件。
答案 0 :(得分:3)
需要考虑的事项,无论是针对此特定问题还是未来,如果您创建IAM角色,为其分配一组权限,然后启动具有该IAM角色的EC2实例,则访问密钥将自动提供给SDK并且您不必冒险将它们存储在配置文件中,就像您现在所做的那样。
答案 1 :(得分:2)
当您查看“bin”目录时,.config文件应命名为yourprogram.exe.config。否则它将找不到配置值,它应该是内容文件,而不是嵌入式资源。 .config文件必须始终存在并与EXE位于同一目录中。