Dynamics CRM插件和VSTS构建

时间:2015-12-12 12:55:54

标签: visual-studio-2015 dynamics-crm-online azure-devops dynamics-crm-2015

以下是我的方案:我们使用Dynamics CRM Online 2015 Update 1.为此,我们必须开发一些插件。我使用最新版本的CRM SDK(v8.0.0)。我们使用Visual Studio Team Services + Visual Studio 2015 Enterprise Edition。

我的插件有一些依赖项,例如在Newtonsoft.Json上。

我发现为了能够部署我的插件,我必须使用ILMerge,以便将Newtonsoft.Json合并到我的插件DLL中,并且一旦部署就可以使用它。该方法在此处描述:http://nicknow.net/dynamics-crm-ilmerge-dll-plugin/ 到目前为止,它工作正常!

此方法的缺点是程序集Microsoft.Crm.Sdk.Prox,Microsoft.Xrm.Sdk和Microsoft.IdentityModel不得包含在合并程序集中。要做到这一点,我必须设置他们的财产"复制本地"为假。

这对于插件部署来说很好。但是当我签入我的插件时,VSTS的构建失败了,因为它无法找到将本地设置为False的3个程序集。

所以我的问题是,在你看来,处理这个问题的最佳方法是什么?例如,可以在构建之前添加一个脚本,将Copy local设置为True吗?怎么样?或者,如果你能想到任何其他想法,请随意:)

3 个答案:

答案 0 :(得分:2)

  • 不要使用Microsoft v8 CRM程序集;这些是Dynamics CRM 2016的一部分。对于CRM 2015,您需要v7。

  • 将NuGet-package Microsoft.CrmSdk.CoreAssemblies 添加到您的插件项目中;它有助于避免构建问题。

  • 将NuGet-package ILMerge 添加到解决方案中。它安装在默认位置。

  • 将批处理脚本添加到项目中,该脚本作为构建后步骤运行。您的脚本应包含与此类似的合并步骤:"%SOLUTIONDIR%packages\ILMerge.2.14.1208\tools\ILMerge" /log:ILMerge.log /keyfile:"%KEYFILE%" /targetplatform:v4,"%PLATFORMDIR%" /out:tmp_merge\%PROJECTBINARY%.dll %PROJECTBINARY%.dll Newtonsoft.Json.dll

答案 1 :(得分:1)

使用Ilmerge作为命令行时,您可以选择要包含的dll。在我的项目中,我通常会:

  • 安装IlMege的NuGet包
  • 添加调用ilmerge.exe的post build事件,并且只包含我在最终dll中需要的库

答案 2 :(得分:1)

VSTS构建不应该在引用上失败。我有一个使用ILMerge.Task的类似结构的构建定义,它运行得非常好。最好的办法是按照以下步骤操作:

  • 确保您的项目中没有任何硬性参考。确保通过Nuget检索Microsoft.CrmSdk.CoreAssemblies包。这可能是您的构建服务器出现问题的原因。
  • 使用 Install-Package MSBuild.ILMerge.Task
  • 获取ILMerge.Task包
  • 设置'复制本地'每个引用(DLL)的属性值必须合并为' true'。确保您设置了“复制本地”'其他对false的引用的值。
  • 确保使用项目中包含的ILMergeOrder.txt文件以正确的顺序合并引用的程序集。

一个名为' ILMerge.props'的文件将添加到您的项目中。您应该在此文件中设置两个属性:

<ILMergeAllowMultipleAssemblyLevelAttributes>true</ILMergeAllowMultipleAssemblyLevelAttributes>
<ILMergeCopyAttributes>true</ILMergeCopyAttributes>

这些属性可确保正确处理不同程序集上的重复属性。