Invoke Code でのエラー

Gmailの添付ファイルをダウンロードする下記のコードを実行したいのですが、エラー表示が出ていて実行できません。
エディタを開くと特に赤線が表示されることもないのですが・・・。

class MyClass
{
public static void GetAttachments(GmailService service, String userId, String messageId, String outputDir)
{
try{
Google.Apis.Gmail.v1.Data.Message
message=service.Users.Messages.Get(userId,messageId).Execute();
IList<Google.Apis.Gmail.v1.Data.MessagePart>
parts=message.Payload.Parts;
foreach(Google.Apis.Gmail.v1.Data.MessagePart part in parts)
{
if(!String.IsNullOrEmpty(part.Filename))
{
String attId=part.Body.AttachmentId;
google.Apis.Gmail.v1.Data.MessagePartBody
attachPart=service.Users.Messages.Attachments
.Get(userId,messageId,attId);

				String attachData=attachPart.Data.Replace('-','+');
				attachData=attachData.Replace('_','/');
				
				Byte[] data=Convert.FromBase64String(attachData);
				File.WriteAllBytes(Path.Combine(outputDir,part.Filename),data);
			}
		}
}
catch(Exception e)
{
	Console.WriteLine("An error occured:" + e.Message);
}

}

ちなみに出ているのは

No Compiled code to run.
error CS1513 :} が必要です。At line -1

です。
どなたかどこを直せばいいかアドバイスください。

{と}のペァが崩れていませんか?

ペァをご確認ください

こんにちは

Invoke Codeアクティビティの内部のコードは、メソッド(関数)の中身を記述するイメージと思っていただいた方が良いと思います。そのためクラス定義やメソッド定義はできないと思います。

上記を実現するのであれば、

public static void GetAttachments(GmailService service, String userId, String messageId, String outputDir)

の部分はInvoke Codeの引数として定義した上で、コードにはこのメソッドの中身を記述するイメージになると思います。

すみません。上記1個足りませんでしたね。
最後に}を足しましたら、次のエラーが足されました。(元のはそのままです)

error CS1022 : 型、名前空間の定義、またはファイルの終わりが必要です。At line 31

ちなみにコードエディタでは最終行は30になっています。

ありがとうございます。
早速ためして下記のように書き換え、引数をプロパティで設定しました。

try
{
Google.Apis.Gmail.v1.Data.Message message=service.Users.Messages.Get(userId,messageId).Execute();
IList<Google.Apis.Gmail.v1.Data.MessagePart> parts=message.Payload.Parts;
foreach(Google.Apis.Gmail.v1.Data.MessagePart part in parts)
{
if(!String.IsNullOrEmpty(part.Filename))
{
String attId=part.Body.AttachmentId;
google.Apis.Gmail.v1.Data.MessagePartBody attachPart=service.Users.Messages.Attachments
.Get(userId,messageId,attId);

				String attachData=attachPart.Data.Replace('-','+');
				attachData=attachData.Replace('_','/');
				
				Byte[] data=Convert.FromBase64String(attachData);
				File.WriteAllBytes(Path.Combine(outputDir,part.Filename),data);
			}
		}
	}

catch(Exception e)
{
Console.WriteLine(“An error occured:” + e.Message);
}

しかし次のメッセージが現れ実行できずじまいです。

error CS0246:型、または空間名’google’が見つかりませんでした。usingディレクティブまたはアセンブリ参照が不足しています。At line 9

上記コードで9行目は

String attId=part.Body.AttachmentId;

です。

こんにちは

C#をお使いですよね?C#では大文字と小文字が厳密に解釈されます。
そのため Google とすべきではないでしょうか?

おっしゃる通りでした!
また、getのあとのexecuteが必要でした。
ありがとうございます!

1 Like