我只花了大约4个小时的时间来试图解释为什么在编译通过通配符指定的SharePoint部署包(wsp文件)文件时并不总是包含在包中。 “总是”原来是“从不在干净的建筑上”和“通常,否则”。实际上,通配符规范指向的文件在项目加载的时候并不存在(它们被放置在那里是构建的一部分),这结果是问题的症结所在。 - 看起来通配符扩展只发生在Visual Studio或MSBuild(它发生在两者中)加载csproj文件时。如果此时没有文件存在,那么作为构建的一部分放置在那里的任何文件都将被视为包含文件包。
最后,我能够通过构建辅助项目(主要项目所依赖的)将所需文件放在那里来部分解决问题,但即使这在第一次在VS中也无法正常工作你有没有加载解决方案。基本上,您必须构建一次解决方案,然后关闭并重新打开,然后再次构建要包含的所有文件。 MSBuild似乎工作方式不同,只在第一次开始构建特定项目时才展开通配符。
我想我想知道的是,如果有更好的方法可以做到这一点 - 例如是否可以在.spdata文件中使用通配符包含,或者是否有其他方法可以指定要包含在.wsp文件中的整个目录(能够指定目标目录名称)?
答案 0 :(得分:0)
如果我理解正确,你的问题来自对msbuild中文件项的评估。
如果你在包装目标中指定一个新的项目组,它只会在步入目标时进行评估,例如:
<Target Name="ConfigurationChanges" AfterTargets="Build">
<ItemGroup>
<ConfigFiles Include="$(DeliveryFolder)\**\*.spdata"/>
</ItemGroup>
</Target>