VS 发布、Web 部署 - 创建事件源
VS Publish, Web Deploy - create Event Source
我想创建一个新的事件日志事件源,以便在我通过 IIS 导入应用程序 时记录我的 webAPI 应用程序。
我将我的应用程序发布到 VS2015 中的 web 部署文件夹 (zip) 文件并从中导入。
我找到了创建事件源的代码:
if ([System.Diagnostics.EventLog]::SourceExists("myWeb.API") -eq $false) {
[System.Diagnostics.EventLog]::CreateEventSource("myWeb.API", "Application")
}
我可以将它放在 EventSource.ps1 文件中,当我从提示中 运行 它时,它会执行我想要的操作。
如何在 IIS 导入应用程序 过程中执行此操作?
我试过使用 .pubxml 文件,但是 use/override/call-it-via 哪个元素让我感到困惑 - 我试过 AfterAddIisSettingAndFileContentsToSourceManifest 和 PipelineDependsOn.
<Target Name="CustomCreateEventSource">
<Message Text="Create Event Source" Importance="high"/>
<PropertyGroup>
<EventSource Condition=" '$(EventSource)'=='' ">
myWeb.API
</EventSource>
</PropertyGroup>
<Exec Command="powershell.exe"
-NonInteractive
-executionpolicy Unrestricted
-file "$(PublishUrl)Publish\EventSource.ps1" "$(EventSource)"" /></Target>
我宁愿它是通过 IIS 导入应用程序完成的,作为一次点击的过程,而不是:
- 导入应用程序
- 运行 powershell
因为它会被不必要的技术用户导入。
非常感谢您抽出宝贵时间提供帮助!
当应用程序导入 IIS 时,您可以使用 <projectName>.wpp.targets
文件启动自定义命令。
例如,如果您的项目名称是 MyApp
,请将名为 MyApp.wpp.targets
的文件添加到项目的根级别。
我测试并验证了此方法使用具有以下内容的目标有效:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CustomTask" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">
<ItemGroup>
<MsDeploySourceManifest Include="runCommand">
<!-- specify InputFormat None (see -->
<Path>powershell.exe -ExecutionPolicy bypass -NoLogo -inputformat none -NonInteractive -Command .'$(_MSDeployDirPath_FullPath)\Deploy\createEventLog.ps1'</Path>
</MsDeploySourceManifest>
</ItemGroup>
</Target>
</Project>
需要注意的一件重要事情是 Visual Studio 有时会缓存 .wpp.targets 文件。 我知道释放它的唯一方法是重新启动Visual Studio。我刚刚遇到这个问题,这让我有一段时间偏离了轨道,因为我遇到了一个我无法解决的错误。
作为参考,这是我用来创建 Zip 包的 .pubxml
文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>Package</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<DesktopBuildPackageLocation>c:\temp\IISImportTestPkg.zip</DesktopBuildPackageLocation>
<PackageAsSingleFile>true</PackageAsSingleFile>
<DeployIisAppPath>Default Web Site/IISImportTest</DeployIisAppPath>
<PublishDatabaseSettings>
<Objects xmlns="" />
</PublishDatabaseSettings>
</PropertyGroup>
</Project>
最后,这里有一些可能有用的资源:
- 这是我想到使用 .wpp.targets 文件的地方:http://sedodream.com/2011/11/08/SettingFolderPermissionsOnWebPublish.aspx
- 我在其中找到 runCommand 提供程序的 MsDeploy 提供程序列表:https://technet.microsoft.com/en-us/library/dd569040(v=ws.10).aspx
我想创建一个新的事件日志事件源,以便在我通过 IIS 导入应用程序 时记录我的 webAPI 应用程序。
我将我的应用程序发布到 VS2015 中的 web 部署文件夹 (zip) 文件并从中导入。
我找到了创建事件源的代码:
if ([System.Diagnostics.EventLog]::SourceExists("myWeb.API") -eq $false) {
[System.Diagnostics.EventLog]::CreateEventSource("myWeb.API", "Application")
}
我可以将它放在 EventSource.ps1 文件中,当我从提示中 运行 它时,它会执行我想要的操作。
如何在 IIS 导入应用程序 过程中执行此操作?
我试过使用 .pubxml 文件,但是 use/override/call-it-via 哪个元素让我感到困惑 - 我试过 AfterAddIisSettingAndFileContentsToSourceManifest 和 PipelineDependsOn.
<Target Name="CustomCreateEventSource">
<Message Text="Create Event Source" Importance="high"/>
<PropertyGroup>
<EventSource Condition=" '$(EventSource)'=='' ">
myWeb.API
</EventSource>
</PropertyGroup>
<Exec Command="powershell.exe"
-NonInteractive
-executionpolicy Unrestricted
-file "$(PublishUrl)Publish\EventSource.ps1" "$(EventSource)"" /></Target>
我宁愿它是通过 IIS 导入应用程序完成的,作为一次点击的过程,而不是:
- 导入应用程序
- 运行 powershell
因为它会被不必要的技术用户导入。
非常感谢您抽出宝贵时间提供帮助!
当应用程序导入 IIS 时,您可以使用 <projectName>.wpp.targets
文件启动自定义命令。
例如,如果您的项目名称是 MyApp
,请将名为 MyApp.wpp.targets
的文件添加到项目的根级别。
我测试并验证了此方法使用具有以下内容的目标有效:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CustomTask" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">
<ItemGroup>
<MsDeploySourceManifest Include="runCommand">
<!-- specify InputFormat None (see -->
<Path>powershell.exe -ExecutionPolicy bypass -NoLogo -inputformat none -NonInteractive -Command .'$(_MSDeployDirPath_FullPath)\Deploy\createEventLog.ps1'</Path>
</MsDeploySourceManifest>
</ItemGroup>
</Target>
</Project>
需要注意的一件重要事情是 Visual Studio 有时会缓存 .wpp.targets 文件。 我知道释放它的唯一方法是重新启动Visual Studio。我刚刚遇到这个问题,这让我有一段时间偏离了轨道,因为我遇到了一个我无法解决的错误。
作为参考,这是我用来创建 Zip 包的 .pubxml
文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>Package</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<DesktopBuildPackageLocation>c:\temp\IISImportTestPkg.zip</DesktopBuildPackageLocation>
<PackageAsSingleFile>true</PackageAsSingleFile>
<DeployIisAppPath>Default Web Site/IISImportTest</DeployIisAppPath>
<PublishDatabaseSettings>
<Objects xmlns="" />
</PublishDatabaseSettings>
</PropertyGroup>
</Project>
最后,这里有一些可能有用的资源:
- 这是我想到使用 .wpp.targets 文件的地方:http://sedodream.com/2011/11/08/SettingFolderPermissionsOnWebPublish.aspx
- 我在其中找到 runCommand 提供程序的 MsDeploy 提供程序列表:https://technet.microsoft.com/en-us/library/dd569040(v=ws.10).aspx