我正在编写工作人员角色来发送电子邮件。它包含一些包含build action = content
和copy to output = Copy Always
如何从WorkerRole的代码访问这些文件?
我不想将这些文件存储在blob中,因为我需要尽快上传此服务,并且我必须能够轻松编辑这些电子邮件模板,而无需为此添加额外的代码。
修改 伙计们,我在谈论Azure。这不适用于加载当前运行的程序集的文件夹的常规方法,因为这将为您提供位于不同位置的Azure主机进程。
答案 0 :(得分:3)
我明白了 - 这是怎么做的:
Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + @"\", @"approot\FileTemplates\");
答案 1 :(得分:1)
有一个构建操作 - 内容没有将文件嵌入到.dll中,它被部署到你的程序集目录(通常是\ bin),然后在你拥有模板的文件夹结构中。这很难写,所以这是一个例子:
Project Directory
-Templates
-EmailTemplateA
在合规和部署后,EmailTemplateA将位于以下位置:\bin\Templates\EmailTemplateA
现在我们知道它在哪里,我们需要使用它。下面是一个代码片段,可以加载模板,替换一些值,然后发送电子邮件
public void SendRegistrationConfirmation(string toAddress, string confirmUrl)
{
const string subject = "Your Registration";
//load the template
var template = File.OpenText(AssemblyDirectory + " \\Templates\\NewProgramRegistration.Template").ReadToEnd();
//replace content in the template
//We have this #URL# string in the places we want to actually put the URL
var emailContent = template.Replace("#URL#", confirmUrl);
//Just a helper that actually sends the email, configures the server, etc
this.SendEmail(toAddress, subject, emailContent);
}
答案 2 :(得分:0)
答案 3 :(得分:-1)
你应该重新考虑你的设计。 - 如上所述,您可以使用本地存储(您需要先在那里复制文件),然后您可以使用System.IO .NET API来操作文件
这个问题是(正如你所说,你正在做出改变) - 如果您横向扩展,现在您拥有具有自己的“模板”本地副本的个人工作角色。您提到不想使用blob存储,但这应该是一个选项,因为它可以充当模板的中央/持久存储库。当然,您可以根据需要在本地复制它们。
另一种选择是使用SQL Azure DB。像模板这样的东西应该超级快,多个角色可以共享。