在VS2010 / IIS 7.5上开发站点时,我使用Web Deploy将站点从我的机器发布到开发站点服务器。
该网站有大约40个虚拟目录,我想在部署期间自动在服务器上创建这些目录。有一种简单的方法可以做到这一点吗?
我正在考虑编写一个小应用程序,它将从文件或数据库加载列表并按需创建它们。这些目录在我的开发机器上具有与在Web服务器上不同的物理路径,这也会对工作产生影响。
答案 0 :(得分:6)
如果您正在使用MSBuild进行Web部署,则可以在.net中编写可用于创建虚拟目录的CustomBuildTask。
有很多关于如何创建和使用自定义构建任务的资源,但这里是我使用自定义构建任务创建虚拟目录的代码:
public void CreateVirtualDirectory()
{
DirectoryEntry oDE = new DirectoryEntry("IIS://" +
this._strServerName + "/W3SVC/" + _webSiteID + "/Root");
//Get Default Web Site
DirectoryEntries oDC = oDE.Children;
//Add row to schema
DirectoryEntry oVirDir = oDC.Add(this._strVDirName,
oDE.SchemaClassName.ToString());
//Commit changes for Schema class File
oVirDir.CommitChanges();
//Set virtual directory to physical path
oVirDir.Properties["Path"].Value = this._strPhysicalPath;
//Set read access
oVirDir.Properties["AccessRead"][0] = true;
//Set the default docs
oVirDir.Properties["EnableDefaultDoc"][0] = true;
oVirDir.Properties["DefaultDoc"][0] = "default.aspx";
//set the name
oVirDir.Properties["AppFriendlyName"][0] = this._strVDirName;
//do it
oVirDir.Invoke("AppCreate", true);
//set the application pool
if (!string.IsNullOrEmpty(_strApplicationPool))
{
object[] param = { 0, _strApplicationPool, true };
oVirDir.Invoke("AppCreate3", param);
oVirDir.Properties["AppIsolated"][0] = "2";
}
//Save all the changes
oVirDir.CommitChanges();
}
答案 1 :(得分:1)
我没有针对WebDeploy进行任何自定义编程,但我已经看到有一个API的参考。我似乎无法找到关于它的官方文档,但也许这个博客+示例应用程序可以提供一个开始:Web Deploy API Web Application
答案 2 :(得分:0)
你能分享一下你的解决方案吗?我正在使用 WebDeploy 将一个 asp.net webforms 应用程序部署到 IIS,我必须创建 02 个包含 .pdf 文件的虚拟目录(指向不同的驱动器)。
如何挂钩 AaronS 在我的 .pubxml 文件中指向的 CustomBuildTask? .以下是文件的片段。
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>https://www.myapplication.com/app</SiteUrlToLaunchAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<MSDeployServiceURL>www.myapplication.com</MSDeployServiceURL>
<DeployIisAppPath>Default Web Site/app</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>True</EnableMSDeployBackup>
<UserName>administrator</UserName>
<_SavePWD>True</_SavePWD>
<PublishDatabaseSettings>
<!-- ... -->
</PublishDatabaseSettings>
<PrecompileBeforePublish>True</PrecompileBeforePublish>
<EnableUpdateable>True</EnableUpdateable>
<DebugSymbols>False</DebugSymbols>
<WDPMergeOption>DonotMerge</WDPMergeOption>
</PropertyGroup>
<ItemGroup>
<MSDeployParameterValue Include="$(DeployParameterPrefix)SiteConnectionString-Web.config Connection String" />
</ItemGroup>
</Project>
我从 Visual Studio 2019 发布应用程序后,IIS 应该有 pdfmedia 虚拟目录。
非常感谢!