IIS Web部署 - 创建虚拟目录?

时间:2010-11-19 20:37:17

标签: asp.net iis-7 virtual-directory webdeploy

在VS2010 / IIS 7.5上开发站点时,我使用Web Deploy将站点从我的机器发布到开发站点服务器。

该网站有大约40个虚拟目录,我想在部署期间自动在服务器上创建这些目录。有一种简单的方法可以做到这一点吗?

我正在考虑编写一个小应用程序,它将从文件或数据库加载列表并按需创建它们。这些目录在我的开发机器上具有与在Web服务器上不同的物理路径,这也会对工作产生影响。

3 个答案:

答案 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 虚拟目录。

pdfmedia

非常感谢!