C# ASP.NET跨不同程序集的可重用用户控件
我们目前正在开发几个Web项目,希望能够创建一个包含跨Web项目共享的用户控件的项目,而不必重新创建它们。从我发现的情况来看,整个过程是完整的,因为每个项目都需要访问实际的C# ASP.NET跨不同程序集的可重用用户控件,c#,asp.net,msbuild,msbuild-target,C#,Asp.net,Msbuild,Msbuild Target,我们目前正在开发几个Web项目,希望能够创建一个包含跨Web项目共享的用户控件的项目,而不必重新创建它们。从我发现的情况来看,整个过程是完整的,因为每个项目都需要访问实际的ascx文件,而不仅仅是对它的引用 我的方法是: 1-使用预生成事件复制.ascx文件 从共享程序集导入当前项目的工作文件夹。这对于调试应用程序非常有效,但是在文件系统发布过程中我们需要做同样的事情 2-使用MSBuild目标在发布时复制.ascx文件 我已将以下目标添加到项目的配置文件中: <Target Name="
ascx
文件,而不仅仅是对它的引用
我的方法是:
1-使用预生成事件复制.ascx文件
从共享程序集导入当前项目的工作文件夹。这对于调试应用程序非常有效,但是在文件系统发布过程中我们需要做同样的事情
2-使用MSBuild目标在发布时复制.ascx文件
我已将以下目标添加到项目的配置文件中:
<Target Name="AfterPublish" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder">
<Exec Command="xcopy.exe SourcePath OutputPath" />
</Target>
(请注意,SourcePath
和TargetPath
是目录的完整路径。我在这里替换了它们以使其更短)
文件系统发布后(右键单击项目->发布)会调用此目标,但是文件不会复制到目标文件夹
我已经确认调用了目标(通过更改
Command=explorer.exe
,将弹出一个Windows资源管理器窗口),并且在CommandPrompt
上以相同的路径运行了xcopy.exe
命令,并且运行正常。所以我不明白为什么它不能作为目标的一部分。有什么想法吗?MSBuild有一个复制任务。请尝试以下操作:
<Target Name="AfterBuild">
<ItemGroup>
<MySource Include='path\to\files\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(MySource)" DestinationFolder="$(OutputDir)\%(RecursiveDir)" />
</Target>
您可能需要检查发布选项,并确保“在发布之前删除所有现有文件”
问题是xcopy命令总是在删除之前执行,所以它们会被复制,但在删除之后会立即被删除
如果你每次都需要一个干净的文件夹,我建议你把所有的东西都放在“后构建”中
我在xcopy
之前尝试了Copy
。那也没用。我不知道这是否是时间问题。事实上就是这样。是的,我在发布之前删除了所有的文件。谢谢
<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>