我正在为Azure数据工厂管道实现自定义活动,以将blob文件从容器移动到另一个容器。源/目标文件的名称从管道的自定义活动的输入/输出数据集传递到DotNetActivity。为简单起见,我们将源文件名作为' input.txt'和目标文件名为' output.txt'。两个容器都上传了#39;和'处理'存在。
以下代码执行复制部分,无论如何结果都不是我所期望的。
logger.Write("Source filename : {0}", sourceFilename); // => input.txt
logger.Write("Destin. filename : {0}", destinationFileName); // => output.txt
CloudBlobContainer sourceContainer = blobClient.GetContainerReference("upload");
CloudBlockBlob sourceBlob = sourceContainer.GetBlockBlobReference(sourceFilename);
CloudBlobContainer destinationContainer = blobClient.GetContainerReference("processed");
CloudBlockBlob destinationBlob = destinationContainer.GetBlockBlobReference(destinationFileName);
logger.Write("Source blob: {0}", sourceBlob.Name); // => input.txt
logger.Write("Destination blob: {0}", destinationBlob.Name); // => processed/output.txt ???
destinationBlob.StartCopyFromBlob(sourceBlob);
结果,blob' processed / output.txt'是为了处理'容器,而目的是将blob命名为" output.txt'。
为什么处理/'前缀是否添加到目标文件名?如何摆脱前缀?
答案 0 :(得分:0)
注意到当将Data Factory从VisualStudio重新部署(发布)到Azure时,更改的.NET实现不会重建,而是部署会加载现有的.NET DLL。显然问题是由早期版本的DotNetActivity引起的。我现在在发布Data Factory更改之前手动构建DotNetActivity,并且以上代码按预期工作。 (未指出之前的解决方案)