C# 如何有条件地部署程序集

C# 如何有条件地部署程序集,c#,visual-studio-2010,msbuild,C#,Visual Studio 2010,Msbuild,我为第三方应用程序构建扩展。我们没有访问源代码的权限。Visual studio有一个生成后命令,用于将文件复制到所述程序的汇编目录 copy $(TargetDir)$(TargetName).pdb "$(ProgramDropDir)" copy $(TargetDir)$(TargetName).dll "$(ProgramDropDir)" 当程序启动时,它会加载程序集,实际上它们是在需要时加载的,我认为这是因为JIT编译。我们的应用程序由49个程序集组成。部署它们都相当缓慢。我可以

我为第三方应用程序构建扩展。我们没有访问源代码的权限。Visual studio有一个生成后命令,用于将文件复制到所述程序的汇编目录

copy $(TargetDir)$(TargetName).pdb "$(ProgramDropDir)"
copy $(TargetDir)$(TargetName).dll "$(ProgramDropDir)"
当程序启动时,它会加载程序集,实际上它们是在需要时加载的,我认为这是因为JIT编译。我们的应用程序由49个程序集组成。部署它们都相当缓慢。我可以在项目级别通过构建绕过缓慢构建。这只生成引用的程序集。95%的情况下,这仍然是个问题。通常,只有一个程序集实际发生了更改…但所有程序集都被复制

如何改进这一过程?理想情况下

A.仅在程序集发生更改时部署程序集。 B.仅在项目文件发生更改时生成。 C.仅当我计划运行主应用程序时复制。例如,运行单元测试时不要复制。 D.当第三方应用程序运行时,构建失败。我必须关闭应用程序。这意味着我必须重新登录到应用程序,等待它加载缓慢加载的beast

我拥有TFS2010。如果绝对必要,我愿意使用新工具。

A.您可以使用。默认情况下,RoboCopy仅在源和目标具有不同的时间戳或不同的文件大小时才会复制文件

如果要使用MSBuild执行任务,还可以在中使用RoboCopy任务

B.如果您使用的是CI服务器,则可以使用轮询SCM机制,每当SCM中发生更改时,该机制就会启动生成


我不知道你说的最后一个是什么意思。“运行”应用程序或某些单元测试时,不会触发任何生成。

是否类似于NuGet[工作?即:仅在进行更新时更新程序集NuGet版本,并在需要更新时简单地拉取最新的NuGet包。后生成处理复制操作。我不希望在运行单元测试时发生复制。但因为这是后生成操作,它会在每个生成上运行。复制只是为了第三方应用程序。因此,只有当我计划在第三方应用程序内部进行测试时,我才希望复制生成后操作。@P.Brian.Mackey您如何运行单元测试?它们应该使用已编译的程序集,并且不需要任何生成。可能我在这里遗漏了一些内容。我知道NUnit以这种方式引用程序集。我使用MSTest。单元测试项目引用需要测试的程序集,就像任何其他visual studio项目一样。测试开始时,将生成引用。即使使用NUnit,我仍然需要在测试程序集之前生成该程序集,这意味着生成后操作仍会启动。