ãããlibphonenumberã®åé¡ãªã®ããAWSLambdaãã¹ãããŒã«ã®åé¡ãªã®ãããããŸããã ãã¹ãããŒã«ã«åé¡ãããããã«æããŸãã
åçŸæé ïŒ
1ïŒAWS Lambdaãã¹ãããŒã«ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãïŒhttpsïŒ//aws.amazon.com/blogs/developer/debugging-net-core-aws-lambda-functions-using-the-aws-net-mock-lambda-test-éå
·/
1ïŒç©ºã®ãµãŒããŒã¬ã¹Lambdaã¢ããªãäœæããŸã
2ïŒlibphonenumberããã±ãŒãžãäŸåé¢ä¿ãšããŠè¿œå ããŸã
3ïŒ Function
ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã var foo = PhoneNumberUtil.GetInstance();
ãå®è¡ããŸã
4ïŒãããã¬ãŒãå®è¡ããŸã
5ïŒãªã¯ãšã¹ããéä¿¡ããŸã
ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãŸã£ããå®è¡ãããŸããã
System.IO.FileNotFoundException: Could not load file or assembly 'PhoneNumbers, Version=8.10.6.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
at Mercury.Function..ctor()
ç§ãæãã€ããæå°ã®åçŸã±ãŒã¹ãããã«æ·»ä»ããŸããã
AWSServerlessApp.zip
ãŸããlibphonenumberã®ãœãŒã¹ã³ãŒããããŠã³ããŒããããã®csprojãã©ã ããœãªã¥ãŒã·ã§ã³ã®ãããžã§ã¯ãåç §ãšããŠè¿œå ããŸããã æ£åžžã«ãã«ããããŸããããã¹ãããŒã«ãä»ããŠã©ã ããåŒã³åºããšããã«åããšã©ãŒãçºçããŸãã
åé¡ãã©ã¡ãåŽã«ããã®ãããããªãã®ã§ãlibphonenumberãããžã§ã¯ãã«ããã°ãéããŸããã
https://github.com/twcclegg/libphonenumber-csharp/issues/95
ããã«ã¡ã¯@rianjs ãç§ãã¡ã¯ããã調ã¹ãŠããŸãã ãã¹ãããŒã«ã§ã¯æ©èœããªãããšã確èªããŸããããä»ã®ãªããžããªã®åé¡ã§è¿°ã¹ãŠããããã«ãåãã©ã€ãã©ãªãã³ã³ãœãŒã«ã¢ããªã§ãæ©èœããŸãã ãŸããä»ã®ããã€ãã®ã©ã€ãã©ãªããã¹ãããŒã«ã§åäœããããšã確èªããã®ã§ããããæ©èœããªãçç±ã調æ»ãç¶ããŸãã æŽæ°ãããå Žåã¯ãç¥ãããã ããã å ±åããŠããã ãããããšãããããŸãã
ã³ãŒããéããŠããã°ãèªåã§ã³ãŒããåŠçã§ããã¯ãã§ãã ; P
ãå®éã®ãã©ã ãç°å¢ã§ã¯æ£åžžã«æ©èœãããšæããŸãã
åé¡ïŒ
åæ§ã®åé¡ããããŸãããã©ã€ãã©ãªãç°ãªããŸãã Microsoft.EntityFrameworkCore2.2.3ãšMicrosoft.EntityFrameworkCore.Sqlite2.2.3ãåç §ããnetcore2.1ã©ã ããããžã§ã¯ãããããŸãã ã¢ãã¯ã©ã ããã¹ãããŒã«ã䜿çšããŠVisualStudioã§å®è¡ãããšã次ã®äŸå€ãã¹ããŒãããŸãã
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Data.Sqlite, Version=2.2.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
at AWSLambda_EfCoreTest.Function.FunctionHandler(String input, ILambdaContext context)
ãã®ã©ã ãé¢æ°ã¯ãå®éã®AWSã¯ã©ãŠãããŒã¹ã®Lambdaç°å¢ã§æ£åžžã«ãããã€ããã³å®è¡ã§ããããšã確èªããŸããã
æ·»ä»ã®å°ããªè€è£œãããžã§ã¯ããã芧ãã ãã
èµ·æºïŒ
aws-lambda-dotnetãªããžããªã®ã¯ããŒã³ãäœæãããã¹ãããŒã«ãå®è¡ããŸããã ããŒã«ãåŒã³åºããŠã³ãŒãã«ã¹ãããã€ã³ããããã®æ°ããåäœãã¹ããäœæããŸããã ãã¹ãããŒã«ã¯ãAmazon.Lambda.TestTool.Runtime :: LambdaAssemblyResolver::OnResolvingã¡ãœããäžã«äŸå€ãã¹ããŒããŸãã ãã®ã¡ãœããã¯AssemblyName=Microsoft.Data.Sqliteã解決ã§ãããnullãè¿ããŸãã ãã®ã¡ãœããã¯ãã¢ã»ã³ããªã解決ãããªãå Žåã«LoadContextãSystem.IO.FileNotFoundExceptionãåŒã³åºããªããã°ãªããªãåã«åŒã³åºãããæåŸã®ã¡ãœããã§ãã
å¥ã®å·ã«æ²èŒãããŠãã解決çã¯æ©èœããŸãã ãã®å·ã§ã¯ãäœè ã¯åã«2.1ã*ããŒãžã§ã³ã«ããŠã³ã°ã¬ãŒãããŸããã äž¡æ¹ã®efã³ã¢ãªãã¡ã¬ã³ã¹ã2.1.8ã«ããŠã³ã°ã¬ãŒããããšããã¹ãããŒã«ãåã³æ©èœãå§ããŸãã ããããããã¯ç§ã«ãšã£ãŠã®éžæè¢ã§ã¯ãããŸããã efcore2.2ã*ã®æ°æ©èœãå©çšããããšããŠããŸãã IMOããŒã«ã¯ãã©ã ãã§ããµããŒããããŠããã¢ã»ã³ããªãããŒãã§ããå¿ èŠããããŸãã
corefxãªããžããªã®ãã®æªè§£æ±ºã®åé¡ã¯ãæ ¹æ¬çãªåé¡ãžã®ãã³ããäžããå¯èœæ§ããããŸãã
ããã«æ¢æ±ããŸãããæéããããŸããã äœãæ¡ã¯ïŒ
äŸåé¢ä¿ã®æ€çŽ¢æ¹æ³ãå€æŽãããããŒãžã§ã³0.9.2ãããã·ã¥ããŸããã ãã®å€æŽã«ãããlibphonenumberã䜿çšãããã®ããŒã«ã§ã©ã ãé¢æ°ãå®è¡ã§ããããã«ãªããŸããã
VisualStudioãšAWSToolkitfor Visual Studioã䜿çšããŠããå Žåã次ã«ãœãªã¥ãŒã·ã§ã³ãéãããšãã«ããªã³ã©ã€ã³ã§ãããšä»®å®ããŠ0.9.2ãžã®æŽæ°ãèªåçã«è¡ãããŸãã
ãŸãã @ rianjs ãæš¡æ¬ãã¹ãããŒã«ã®ã³ãŒãã¯ãªãŒãã³ãœãŒã¹ã§ããã httpsïŒ//github.com/aws/aws-lambda-dotnet/tree/master/Tools/LambdaTestToolã®ãã®ãªããžããªã«ãããŸãã
ãã@normj ã
ãããŸã§ã®å©ãã«æè¬ããŸãã ããŒã«ã0.9.2ã«æŽæ°ããŸããã ãŸã System.IO.FileNotFoundExceptionãçºçããŠããŸãã äžèšã®ãµã³ãã«ãããžã§ã¯ãã䜿çšããŠè€è£œã§ããŸããïŒ
ä»ã®ãšãããã³ã³ãœãŒã«ã¢ããªãä»ããŠããŒã«ã«éçºçšã®ã©ã ãé¢æ°ãéå§ããããšã§åé¿ã§ããŸãã
ããŒããããã¯ãŸã ç§ã«ã¯ããŸããããŸããã
ç§ãç·šéãã以åã®ã³ã¡ã³ãã¯ééã£ãŠããŸããã ææ°ã®åé¡ã¯PEBKACã ãã§ããã LibPhoneNumberã¢ã»ã³ããªã¯åé¡ãªãèŠã€ãããŸããã
0.9.2ã§ãã©ã ããããžã§ã¯ããäŸåããŠããå¥ã®ãããžã§ã¯ãããåç §ãããŠããnugetããã±ãŒãžã§ãã®åé¡ãçºçããŠããŸãã
0.9.2ã§ãåãåé¡ãçºçããŠããŸãã
ãã¹ãããŒã«ã¯ãã§ã«Microsoft.Extensionsã*2.1ãããŒãããŠããŸãã ããããã£ãŠãMicrosoft.Extensionsã䜿çšããå Žåã¯å€±æããŸãã 2.2ã*ã
ãã®åé¡ã解決ã§ããŸããïŒ
@jiabiaoç§ã¯åãåé¡ãæ±ããŠããŸãã
System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621)
ããŒãžã§ã³0.9.2
@AngelVenchevããŒãžã§ã³ã2.2ãã2.1ã«å€æŽããŠã¿ãŠãã ããã ããã¯ç§ã«ãšã£ãŠåæ§ã®åé¡ã§ããŸããããŸããã Lambdaã.NetCore2.2ããµããŒãããŠããªãããšã«é¢ä¿ããŠããå¯èœæ§ããããŸã
@IdresAhmedããã¯ç§ããã£ãããšã§ãããã©ã ãã«ãããã€ããããã®2ã€ã®ããŒãžã§ã³2.2ãšãããŒã«ã«ã§å®è¡ããããã®2.1ããããŸãã
@IdresAhmed @AngelVenchevããŸããŸãªããŒãžã§ã³ã®Microsoft.Extensionsã*ã䜿çšããåé¡ã«å¯ŸåŠãããã®æ©èœãªã¯ãšã¹ããéãããã¹ãããŒã«ã®ASP.NETCoreWebã¢ããªã«ãã£ãŠèªã¿èŸŒãŸããŸããã
Google.Apis.Authã®äŸåé¢ä¿ã«ã€ããŠãåãåé¡ããããŸãã AWSã«ãããã€ãããšæ£åžžã«åäœããŸããããã¹ãããŒã«ã䜿çšããŠããŒã«ã«ã§å®è¡ããããšãããšããã®ãšã©ãŒãçºçããŸãã .NETCore2.1ãšãã¹ãããŒã«0.9.2ã䜿çšããŠããŸãã
System.IO.FileLoadExceptionïŒãã¡ã€ã«ãŸãã¯ã¢ã»ã³ããªãèªã¿èŸŒããŸããã§ãã'Google.Apis.AuthãVersion = 1.35.1.0ãCulture = neutralãPublicKeyToken=4b01fa6e34db77ab'ã çŸåšã®ç¶æ ã§ã¯ãæäœã¯åæ³ã§ã¯ãããŸããã
ç§ã¯ãã®åé¡ã«ééãããçŸåšã®ç¶æ ã§ã¯æäœãåæ³ã§ã¯ãªãããšããåå ãèŠã€ããå¯èœæ§ããããšä¿¡ããŠããŸãã 以äžã®åçã®ãã©ãŒããããæªãããšããèš±ããã ããã
Tools\LambdaTestTool\Amazon.Lambda.TestTool\Runtime\LambdaAssemblyResolver.cs OnResolving Line 79
ããå
·äœçã«ã¯93è¡ç®ïŒ
return this.loadContext.LoadFromAssemblyPath(assemblies[0]);
ããã§ã®åé¡ã¯ãã¢ã»ã³ããªã«è€æ°ã®ã©ã³ã¿ã€ã ãå«ãŸããŠããå Žåããªã¹ãã®æåã®ã©ã³ã¿ã€ã ã®ã¿ãéžæãããããšã§ãã å Žåã«ãã£ãŠã¯ãããã¯UNIXã©ã³ã¿ã€ã ã§ãããç§ã®å Žåã¯éçºã«äœ¿çšããŠãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ããWindowsãã·ã³ãšäºææ§ããããŸããã
ãããžã§ã¯ããå ¬éãããšäŸåé¢ä¿ãé©åã«ã¬ã³ããªã³ã°ãããããããããã€æã«åé¡ãçºçããããšã¯ãããŸããã
ããšãã°ããããžã§ã¯ãããããã°çšã«ã³ã³ãã€ã«ããããšãã[projectName].deps.jsonããšããååã®ãã¡ã€ã«ãçæãããŸãã
ç§ã®å Žåããã®ãã¡ã€ã«ã§ã¯ããããåç
§ããŠããã©ã€ãã©ãªã®æåã®ãšã³ããªãšèŠãªããŸããã
"runtimeTargets": {
"runtimes/unix/lib/netstandard1.6/Microsoft.Management.Infrastructure.Native.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
},
çãããç¹ã確èªããããã«ããããžã§ã¯ããå®è¡ããVisualStudioã§debug->windows-> modulesãéããŠãããŒããããŠããã¢ã»ã³ããªãå®éã«ã¯æ£ãããªãããšã確èªããŸããã äžèšã®ã³ãŒãã¯ããªã¹ãã®æåã®äŸåé¢ä¿ã®ã¿ãååŸããŠãããWindowsãã©ãããã©ãŒã ã§ã¯æ©èœããŸããã
å¿ èŠã«å¿ããŠãLambdaAssemblyResolver.csOnResolvingã®éå§è¡78ã次ã®ããã«å€æŽã§ããŸããã
if (library != null){
var deps = library.RuntimeAssemblyGroups.Distinct().Count() > 1
? library.RuntimeAssemblyGroups.Where(x => x.Runtime.StartsWith("win") && x.Runtime.Contains("x64")).SelectMany(g => g.AssetPaths)
: library.RuntimeAssemblyGroups.SelectMany(g => g.AssetPaths);
var wrapper = new CompilationLibrary(
library.Type,
library.Name,
library.Version,
library.Hash,
deps,
library.Dependencies,
library.Serviceable);
var assemblies = new List<string>();
this.assemblyResolver.TryResolveAssemblyPaths(wrapper, assemblies);
if (assemblies.Count > 0)
{
return this.loadContext.LoadFromAssemblyPath(assemblies.FirstOrDefault(x => !x.EndsWith(".Native.dll")));
}
}
Win 64以éçšã«ãã«ããããã©ã³ã¿ã€ã ããŒãžã§ã³ã®ã¿ããã«ãããã€ãã£ããã€ããªãé€å€ãããã£ã«ã¿ãŒãè¿œå ããŸããã
ããã¯ãç§ã«ãšã£ãŠååãã§ãããç§ã®ç¹å®ã®ã±ãŒã¹ã§ãããããPRãšããŠæåºããŸããã§ãããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšãã©ãããã©ãŒã ã®æ€åºãçµã¿åãããããšã§ãé©åãªã¢ã»ã³ããªã®ããŒããå¯èœã«ãªããŸãã
ãããæ©èœãªã¯ãšã¹ããŸãã¯ãã°ã«ãšã¹ã«ã¬ãŒã·ã§ã³ããå¿ èŠããããã©ããããããªãã
ãŸãããã®ãããžã§ã¯ãã«è²¢ç®ããããã«ç§ã«ã§ããããšãããã°ãç§ã«ç¥ãããŠãã ããã
åæ§ã®åé¡ããããŸãã
Swaggerãè¿œå ããããšããŠããŸãïŒ <PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" />
ããã¯ãAPIGatewayã®èåŸã«ãããããã€ãããasp.netã¢ããªã§æ©èœããŸãã
ãã ãããã¹ãããŒã«ã§ã¯ããã®äŸå€ãã¹ããŒãããŸãã
æšæºã®ãµãŒããŒã¬ã¹ãããžã§ã¯ããã³ãã¬ãŒããåçŸããã®ã¯éåžžã«ç°¡åã§ãäžèšã®ã¢ã»ã³ããªãè¿œå ããConfigureServicesã¡ãœãããšConfigureã¡ãœããã«ããããservices.AddSwaggerGen()
ïŒ$è¡ãšapp.UseSwagger();
è¡ãè¿œå ããŸãã
ã¢ãã¯ã©ã ãããŒã«ã§ã¢ããªãèµ·åããŸãã ããŒã«ããAPIGatewayãã³ãã¬ãŒãã䜿çšããŠãªã¯ãšã¹ããè¡ããŸãã FileNotFoundExceptionãã¹ããŒããŸã
åãåé¡ãçºçããŸãã
System.IO.FileNotFoundException: Could not load file or assembly 'XYZ, Version=1.0.0.32, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
at SomeClass.Function..ctor()
ããã§ãXYZã¯.NET Standard 2.0 libã§ãããLambdaãããžã§ã¯ãã¯Core2.1ã§ãã
åãåé¡
System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621)
at Namespace.Function..ctor()
ããã«ã¡ã¯ç§ã¯åãåé¡ãæ±ããŠããŸããããã解決ããããã®å©ãã¯ãããŸããïŒ
System.Data.SqlClient.dllã§ä»æ¥åãåé¡
ããã«ã€ããŠã¡ããã©èå³ããããŸã..ããããç§ã¯ProcMonãå®è¡ãããã¹System.Data.SqlClient.dll-ïŒãã®ã³ã³ããã¹ãã§åé¡ãçºçããŠãããã¡ã€ã«ïŒãç£èŠããŸãããdotnet-lambda-test-toolã®ãšãã«2åæ°ã¥ããŸããã -2.1.exeã¯ãSystem.Data.SqlClient.dllã«å¯ŸããŠCreateFileMappingãå®è¡ããããšããŠããŸããããã¡ã€ã«ããªãŒããŒã®ã¿ã§ããã¯ãããçµæãååŸããŸãã ããã«èª¿æ»ããçµæãããã¡ã€ã«ãŸãã¯ã¢ã»ã³ããªãèªã¿èŸŒããŸããã§ããããšãããšã©ãŒãçºçããå¯èœæ§ãããããšãããããŸããã ãã®åŸã管çè
ãšããŠVisual Studio 2019ãåèµ·åããããšã§ããã®ãšã©ãŒã解æ¶ã§ãããšæããŸãããããã®ãããªéã¯ãããŸããã§ããã ãã®åé¡ãæ±ããŠããä»ã®äººãããããã°ããããšããŠããã©ã ãã®ã¢ã»ã³ããªã§ãã®åé¡ãèŠã€ãããšæããŸãã ããã誰ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã ç§ã¯ãŸã åé¿çãæ¢ããŠããŸãã
OKãOKãOK ..ç§ã«ãšã£ãŠãã®åé¡ã¯ãSystem.Data.SqlClientNugetããã±ãŒãžã®ããŒãžã§ã³ã4.5.1ã«äžããå¿ èŠããã£ãããšãåå ã§ããã äœããã®çç±ã§ãããããé«ãå€ãæå®ãããšããã®ã¹ã¬ããã«é¢ããããã¡ã€ã«ãŸãã¯ã¢ã»ã³ããªãèªã¿èŸŒããŸããã§ããããšãããšã©ãŒãçºçããŸãã ããŒãžã§ã³4.6以éã§ã¯ãLambdaãããã°ããŒã«ã䜿çšããŠããŒã«ã«ã§ãããã°ãããšãã«ãšã©ãŒãçºçããŸãã
ã¹ããŒã¿ã¹ãæŽæ°ãããã£ãã ç§ã¯çŸåšã次ã®.NET Core3.1Lambdaã©ã³ã¿ã€ã çšã«ãã®ããŒã«ã®.NETCore3.1ããŒãžã§ã³ã«åãçµãã§ããŸãã ãã®ããã®äœæ¥ã¯ã mock-testtool-31ã§è¿œè·¡ã§ããŸãã
ãã®ããŒãžã§ã³ã§ã¯ã.NET Core 3.0ã§è¿œå ãããAssemblyDependencyResolverã䜿çšããŠãLambdaé¢æ°ãå¥ã®AssemblyLoadContextã«ããŒãããŠããŸãã ç°ãªãããŒãžã§ã³ã®ã¢ã»ã³ããªã䜿çšããLambdaé¢æ°ããã¹ãããŒã«ã«ãã£ãŠããŒããããå Žåãããã¯ãããã®åé¡ã«åœ¹ç«ã¡ãŸãã
3.1ãã©ã®ããã«ãã¹ãã§ããŸããïŒ
è¶
ã·ã³ãã«ãªãã³ãã¬ãŒããããžã§ã¯ãã§ãåãåé¡ãçºçããŠããŸãããã
System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.1.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621)
at AWSLambda1.Functions.MyFunction..ctor()
Microsfot.Extensions.Configuration.Abstractions
ã䜿çšïŒææ°ã®3.1.3ïŒ
ãã¹ãŠã®ã³ã¡ã³ããèªãã åŸãç§ã¯ããªãã®äœäººããšåã解決çã䜿çšããŸãã ããã±ãŒãžãšãããã«ãã£ãŠåç §ãããŠããããã±ãŒãžãããäœãããŒãžã§ã³ã«ããŠã³ã°ã¬ãŒãããå¿ èŠããããŸããã ãã®å Žåãç§ã¯2.1ã䜿çšããŠããŸãã
ããã¯ç§ãä»æã£ãŠãããã®ãªã®ã§ãç§ã®ã¢ãã¯ããŒã«ãæ©èœããŸãã
åé¡ã«ã€ããŠã®äºå®ã®ããã€ããæãåºãããããã ãã«ã
ãããç§ã®å Žåã®ãšã©ãŒã®åå ãšãªãè¡ã§ãã
public MyFunction() : this(StartUp.Container.BuildServiceProvider()) {}
ããã¯ç§ã®Startup.cs
ã§ã
using AWSLambda1.Config;
using AWSLambda1.Services;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace AWSLambda1
{
public class StartUp
{
public static IServiceCollection Container => ConfigureServices(LambdaConfiguration.Configuration);
private static IServiceCollection ConfigureServices(IConfigurationRoot root)
{
var services = new ServiceCollection();
var a = root.GetSection("MySection");
services.Configure<EnvMySection>(options =>
root.GetSection("MySection").Bind(options));
var b = new MyFunctionEnvironment() { Something = LambdaConfiguration.Configuration["Hello"] ?? "" };
services.AddSingleton(b);
services.AddTransient<IMyService, MyService>();
return services;
}
}
}
ããŒãžã§ã³0.10.0ã¯ã.NETCore2.1ãš.NETCore3.1ã®äž¡æ¹ã§æ¬æ¥ãªãªãŒã¹ãããLambdaã³ãŒããå¥ã®AssemblyLoadContextã«ããŒãããããã«ãªããŸããã ããã§ãããã§å ±åãããåé¡ã®å€ããä¿®æ£ããããšæããŸãã ãã®åé¡ã¯å€ãã®ã§éããŸãããããã€ãã®åå¥ã®åé¡ããããšæããŸãã æ°ããããŒãžã§ã³ã䜿çšããåŸãåé¡ã解決ããªãå Žåã¯ãå¥ã®åé¡ãéããŠè¿œè·¡ããããããŠãã ããã
@normjã«æè¬ããããã§ãšãããããŸãããã¹ãããŸã
@normj
ã¡ãã£ãšãããã ç§ã¯6æ¥åã«åãåé¡ãæ±ããŠããŸããã ç§ã¯ãã®ã¹ã¬ããã®æåŸã®æçš¿ã§æã£ãŠãããã¹ãŠã®æ
å ±ãã«ããŒããããšããŸããã 蚌æãåŸããããŸã§ããã®åé¡ã¯ãŸã 解決ãããŠããªããšæããŸãã
3.1ã§ãã¹ãããŸãããïŒ
@Edulopezæšæ¥å ¬éãããææ°ããŒãžã§ã³ãè©ŠããŸãããïŒ åé¡ããŸã ååšããå Žåã¯ããªããžããªã§å¥ã®åé¡ãäœæããŠãã ããã ãã®ã¹ã¬ãããæ±ãã«ãããªã£ããšæããã°ããã§ãå ±åãããå€ãã®åé¡ãæ°ããããŒãžã§ã³ã§ä¿®æ£ããããšæããŸãã
æãåèã«ãªãã³ã¡ã³ã
Google.Apis.Authã®äŸåé¢ä¿ã«ã€ããŠãåãåé¡ããããŸãã AWSã«ãããã€ãããšæ£åžžã«åäœããŸããããã¹ãããŒã«ã䜿çšããŠããŒã«ã«ã§å®è¡ããããšãããšããã®ãšã©ãŒãçºçããŸãã .NETCore2.1ãšãã¹ãããŒã«0.9.2ã䜿çšããŠããŸãã