【问题标题】:ASP.NET Reusable User Controls Across Different Assemblies跨不同程序集的 ASP.NET 可重用用户控件
【发布时间】:2014-08-29 16:37:09
【问题描述】:

我们目前正在开发几个 Web 项目,并希望能够创建一个包含跨 Web 项目共享的用户控件的项目,而不必重新创建它们。根据我的发现,整个过程is a pain 因为每个项目都需要访问实际的ascx 文件,而不仅仅是对其的引用。

我的处理方法是:

1- 使用 Pre-Build 事件复制 .ascx 文件

从共享程序集到当前项目的工作文件夹。这适用于调试应用程序,但我们需要在文件系统发布期间做同样的事情。

2- 在发布过程中使用 MSBuild 目标复制 .ascx 文件

我在项目的配置文件中添加了以下目标:

<Target Name="AfterPublish" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder">
   <Exec Command="xcopy.exe SourcePath OutputPath" />
</Target>

(请注意,SourcePathTargetPath 是目录的完整路径。我在这里替换了它们以使其更短)

在文件系统发布后调用此目标(右键单击项目 -> 发布),但是,文件不会被复制到目标文件夹。

我已经确认目标被调用(通过更改Command=explorer.exe,会弹出一个 Windows 资源管理器窗口)并且还在CommandPrompt 上使用相同的确切路径运行xcopy.exe 命令,它确实工作正常。所以我不明白为什么它不能作为目标的一部分。有什么想法吗?

【问题讨论】:

    标签: c# asp.net msbuild msbuild-target


    【解决方案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 (&quot;$(PublishUrl)*.*&quot;) DO rmdir &quot;%%p&quot; /s /q" />-->
    <Exec Command="del /q $(PublishUrl)\*" Condition="Exists('$(PublishUrl)')"/>
    <Exec Command="FOR /D %%p IN (&quot;$(PublishUrl)\*.*&quot;) DO rmdir &quot;%%p&quot; /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>
    

    【讨论】:

    • 这确实做到了。是的,我在发布之前删除了所有文件。谢谢!
    【解决方案2】:

    MSBuild 有一个复制任务。请尝试以下操作:

    <Target Name="AfterBuild">
      <ItemGroup>
        <MySource Include='path\to\files\**\*.*" />
      </ItemGroup>
      <Copy SourceFiles="@(MySource)" DestinationFolder="$(OutputDir)\%(RecursiveDir)" />
    </Target>
    

    【讨论】:

    • 我在xcopy 之前尝试过Copy。那也没有用。不知道是不是时间问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多