以下是我的方案:我们使用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吗?怎么样?或者,如果你能想到任何其他想法,请随意:)
答案 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。在我的项目中,我通常会:
答案 2 :(得分:1)
VSTS构建不应该在引用上失败。我有一个使用ILMerge.Task的类似结构的构建定义,它运行得非常好。最好的办法是按照以下步骤操作:
一个名为' ILMerge.props'的文件将添加到您的项目中。您应该在此文件中设置两个属性:
<ILMergeAllowMultipleAssemblyLevelAttributes>true</ILMergeAllowMultipleAssemblyLevelAttributes>
<ILMergeCopyAttributes>true</ILMergeCopyAttributes>
这些属性可确保正确处理不同程序集上的重复属性。