- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在用 C# 构建本地静态站点生成器。它将一堆模板编译成普通旧 HTML 文件的层次结构。我想将生成的文件上传到我的 Windows Azure 网站并实时反射(reflect)更改,并且我希望能够通过我的脚本以编程方式执行此操作。
就目前情况而言,我必须使用 WebMatrix 手动上传生成的文件,因为我无法找到可让我直接将 HTML 上传到 Windows Azure 网站的 API 或 SDK。
当然,除了使用 sFTP 库之外,还必须有一种方法可以从代码中执行此操作(因为它不使用 WebMatrix/IIS 协议(protocol),我认为该协议(protocol)发送压缩的差异,速度会很慢,并且意味着上传期间数据不同步,而某些文件已更新,而其他文件尚未更新。)如果可以避免的话,我也不想将生成的网站提交到源代码管理。对我来说,仅仅将某些东西作为部署的实现细节放入源代码控制中似乎在概念上是错误的。
更新:WebMatrix 内部使用 Web Deploy (MSDeploy)。理论上,您应该能够使用 API 自己构建部署包,但我能找到的 99% 的示例都是使用命令行工具或 Visual Studio 中的 GUI 工具。我需要构建包并从 C# 中以编程方式部署它。关于如何解决这个问题有什么想法或指导吗? MSDN 上的文档并没有真正显示这种情况的任何示例。
最佳答案
好的,我在 Microsoft 的几个友好人员的帮助下弄清楚了该怎么做。 (请参阅 David's Ebbo's response to my forum question ,以及来自 Sayed Hashimi 的非常有用的信息,展示了如何从 msdeploy.exe 控制台应用程序准确地执行我想要执行的操作)。
只需从 Azure Web 门户获取 PublishSettings 文件即可。在文本编辑器中打开它以将值粘贴到以下代码中。
var destinationOptions = new DeploymentBaseOptions()
{
// userName from Azure Websites PublishSettings file
UserName = "$msdeploytest",
// pw from PublishSettings file
Password = "ThisIsNotMyPassword",
// publishUrl from PublishSettings file using https: protocol prefix rather than 443 port
// and adding "/msdeploy.axd?site={msdeploySite-variable-from-PublishSettings}"
ComputerName = "https://waws-prod-blu-003.publish.azurewebsites.windows.net/msdeploy.axd?site=msdeploytest",
AuthenticationType = "Basic"
};
// This option says we're giving it a directory to deploy
using (var deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.ContentPath,
// path to root directory of source files
@"C:\Users\ryan_000\Downloads\dummysite"))
{
var syncOptions = new DeploymentSyncOptions();
syncOptions.WhatIf = false;
// "msdeploySite" variable from PublishSettings file
var changes = deploymentObject.SyncTo(DeploymentWellKnownProvider.ContentPath, "msdeploytest", destinationOptions, syncOptions);
Console.WriteLine("BytesCopied: " + changes.BytesCopied.ToString());
Console.WriteLine("Added: " + changes.ObjectsAdded.ToString());
Console.WriteLine("Updated: " + changes.ObjectsUpdated.ToString());
Console.WriteLine("Deleted: " + changes.ObjectsDeleted.ToString());
Console.WriteLine("Errors: " + changes.Errors.ToString());
Console.WriteLine("Warnings: " + changes.Warnings.ToString());
Console.WriteLine("ParametersChanged: " + changes.ParameterChanges.ToString());
Console.WriteLine("TotalChanges: " + changes.TotalChanges.ToString());
}
您也许还可以跌跌撞撞地通过 obscure documentation on MSDN 。有很多名称奇怪的选项类,但是只要眯起眼睛并在文档中翻来覆去,就可以看到命令行选项(在网上找到示例要容易得多) ) 映射到 API 调用。
关于c# - 如何以编程方式将静态 HTML 站点上传到 Windows Azure 网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117783/
我是一名优秀的程序员,十分优秀!