Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET跨不同程序集的可重用用户控件_C#_Asp.net_Msbuild_Msbuild Target - Fatal编程技术网

C# ASP.NET跨不同程序集的可重用用户控件

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="

我们目前正在开发几个Web项目,希望能够创建一个包含跨Web项目共享的用户控件的项目,而不必重新创建它们。从我发现的情况来看,整个过程是完整的,因为每个项目都需要访问实际的
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 (&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>