我们目前正在开发多个Web项目,并希望能够创建一个项目,其中包括跨Web项目共享的用户控件,而不必重新创建它们。根据我的发现,整个过程is a pain因为每个项目都需要访问实际的ascx
文件,而不仅仅是对它的引用。
我接近这个的方法是:
从共享程序集到当前项目的工作文件夹。这适用于调试应用程序,但我们需要在文件系统发布期间执行相同的操作。
我将以下目标添加到项目的配置文件中:
<Target Name="AfterPublish" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder">
<Exec Command="xcopy.exe SourcePath OutputPath" />
</Target>
(请注意,SourcePath
和TargetPath
是目录的完整路径。我在这里替换它们以缩短它们。
在文件系统发布(右键单击项目 - &gt;发布)后调用此目标,但是,文件不会被复制到目标文件夹。
我确认已调用目标(通过更改Command=explorer.exe
,弹出Windows资源管理器窗口),并在{{1}上运行xcopy.exe
命令,其路径相同它确实工作得很好。所以我不明白为什么它不能作为目标的一部分。有什么想法吗?
答案 0 :(得分:1)
您可能必须检查发布选项并确保“在发布之前删除所有现有文件”
问题是xcopy命令总是在删除发生之前执行,所以它们会被复制但是会在之后删除。
如果您每次我建议您将所有内容放入“AfterBuild”
时需要一个干净的文件夹<Target Name="AfterBuild">
<Exec Command="echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Clean Publish Folder @@@@@@@@@@@@@@@@@@@@@@@@@@@@" />
<Exec Command="echo $(PublishUrl)" />
<Exec Command="echo Publish Folder Deleted...." Condition="Exists('$(PublishUrl)')"/>
<!--<Exec Command="del /q $(PublishUrl)\*" Condition="Exists('$(PublishUrl)')"/>-->
<!--<Exec Command="FOR /D %%p IN ("$(PublishUrl)*.*") DO rmdir "%%p" /s /q" />-->
<Exec Command="del /q $(PublishUrl)\*" Condition="Exists('$(PublishUrl)')"/>
<Exec Command="FOR /D %%p IN ("$(PublishUrl)\*.*") DO rmdir "%%p" /s /q" />
<Exec Command="echo Publish Folder Creation...." Condition="Exists('$(PublishUrl)')"/>
<Exec Command="mkdir $(PublishUrl)" Condition="!Exists('$(PublishUrl)')"/>
<Exec Command="echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Copying @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" />
<Exec Command="xcopy.exe SourceDir DestinationDir /S /E /H" />
</Target>
答案 1 :(得分:0)
MSBuild有一个复制任务。请尝试以下方法:
<Target Name="AfterBuild">
<ItemGroup>
<MySource Include='path\to\files\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(MySource)" DestinationFolder="$(OutputDir)\%(RecursiveDir)" />
</Target>