gpt4 book ai didi

console-application - 如何使用 Web 发布管道和 Web 部署 (MSDEPLOY) 来发布控制台应用程序?

转载 作者:行者123 更新时间:2023-12-01 01:07:27 26 4
gpt4 key购买 nike

我想使用 web 部署将 Visual Studio“控制台”应用程序发布到目标系统上的文件夹。

我有一些运气,并且能够生产出与我需要的相似的东西,但并不完全如此。

我已将以下内容添加到控制台 .csproj:

添加了以下 projectName.wpp.targets 文件

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

我添加了以下 projectName.wpp.targets:
<Project DefaultTargets="Build"  xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

<PropertyGroup>
<DeployAsIisApp>false</DeployAsIisApp>
<IncludeSetAclProviderOnDestination>false</IncludeSetAclProviderOnDestination>
</PropertyGroup>
<ItemGroup>
<FilesForPackagingFromProject Include="$(IntermediateOutputPath)$(TargetFileName).config">
<DestinationRelativePath>bin\%(RecursiveDir)%(FileName)%(Extension)</DestinationRelativePath>
<FromTarget>projectName.wpp.targets</FromTarget>
</FilesForPackagingFromProject>
</ItemGroup>
</Project>

然后我编辑 .SetParameters.xml 文件如下:
<parameters>
<setParameter name="IIS Web Application Name" value="c:\company\project" />
</parameters>

当我使用生成的 .cmd 文件进行部署时,我将所有文件部署到 C:\company\project\bin。

这还不错,但我想做得更好。特别是,我想省略“bin”文件夹并将所有文件放在“C:\company\project”文件夹中,并且我希望能够指定 ACL

有没有人能够解决这些问题?

最佳答案

好的,这里是如何省略“bin”文件夹的方法。
首先,我想强调的是,所有这些与 msdeploy 相关的东西都是用于 Web 应用程序部署的,而“bin”文件夹在我看来几乎是硬编码在内部深处。所以如果你想摆脱它——你必须做一些肮脏的事情。我做的。

我们将不得不改变 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets项目一点点,所以最好不要改变它,但它是副本。

脚步:

1.备份$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets (或者,您可以安装 MSBuild.Microsoft.VisualStudio.Web.targets 包,将您的 csproj 文件重定向到从包中获得的 Microsoft.WebApplication.targets 文件并使用它)。
2.在$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplicaton.targets找到看起来像 <CopyPipelineFiles PipelineItems="@(FilesForPackagingFromProject)" 的 xml 节点(其中有几个,从 ~2570 行中取一个)。
3. 注释掉节点,替换为自定义节点,最终看起来像:

<!--
<CopyPipelineFiles PipelineItems="@(FilesForPackagingFromProject)"
SourceDirectory="$(WebPublishPipelineProjectDirectory)"
TargetDirectory="$(WPPAllFilesInSingleFolder)"
SkipMetadataExcludeTrueItems="True"
UpdateItemSpec="True"
DeleteItemsMarkAsExcludeTrue ="True"
Condition="'@(FilesForPackagingFromProject)' != ''">
<Output TaskParameter="ResultPipelineItems" ItemName="_FilesForPackagingFromProjectTempory"/>
</CopyPipelineFiles>-->

<!-- Copying files to package folder in 'custom'(dirty) way -->
<CreateItem Include="$(OutputPath)\**\*.*">
<Output TaskParameter="Include" ItemName="YourFilesToCopy" />
</CreateItem>
<Copy SourceFiles="@(YourFilesToCopy)"
DestinationFiles="@(YourFilesToCopy->'$(WPPAllFilesInSingleFolder)\%(RecursiveDir)%(Filename)%(Extension)')" />

然后
4.你的projectName.wpp.targets不必有 FilesForPackagingFromProject ,所以它看起来像:
<!-- targets -->
<PropertyGroup>
<DeployAsIisApp>false</DeployAsIisApp>
<IncludeSetAclProviderOnDestination>false</IncludeSetAclProviderOnDestination>
</PropertyGroup>
<ItemGroup>
<!-- intentionally left blank -->
</ItemGroup>
</Project>

就是这样。为我工作(tm),经过测试。老实说,我不喜欢这种方法,但这是我让它以所需方式工作的唯一方法。是否在项目中使用它取决于您。

我的意见是不要在这里使用 msdeploy - 这不是你的任务。
最好从头开始编写 msbuild-scripts 或接受“bin”文件夹,并在需要下一次自定义时再次与框架作斗争。

关于console-application - 如何使用 Web 发布管道和 Web 部署 (MSDEPLOY) 来发布控制台应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17583386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com