ResolveAssemblyReference无法找到dll,而且我无法强制其查看其位置

时间:2018-11-06 15:22:59

标签: c++ msbuild resolveassemblyreference

我在顶部有n个csharp项目和cpp项目,该cpp提供了接口和标头,以便那些csharp项目可以在其他cpp解决方案中使用。

构建机器配置为使用任何CPU体系结构构建csharp项目,因此它在Solution \ bin \ Release中为每个构建提供单个程序集。对于cpp,anyCpu不可用,因此我两次构建项目并将程序集存储在Solution \ bin \ Release \ x86和x64文件夹中。

所有这些都是将它与.targets文件一起打包在nuget中,以减轻其他cpp项目的消耗。

问题是cpp项目正在使用ResolveAssemblyReference寻找csharp组件,但找不到它,给出了误导性消息:

    ResolveAssemblyReferences:
    Primary reference "Implementation".
        Could not find dependent files. Expected file "C:\Jenkins\Workspace\Solution\bin\Release\x86\Implementation.dll" does not exist.
        Could not find dependent files. Expected file "C:\Jenkins\Workspace\Solution\bin\Release\x86\Implementation.dll" does not exist.
        Resolved file path is "C:\Jenkins\Workspace\Solution\bin\Release\x86\Implementation.dll".
        Reference found at search path location "".

我尝试使用命令行属性,自定义目标/属性来替代ResolveAssemblyReferences行为,但是没有任何运气。 https://docs.microsoft.com/en-us/visualstudio/msbuild/resolveassemblyreference-task?view=vs-2017中描述的参数似乎是在构建过程中计算的,我无法注入任何值,在这种情况下,该值应该类似于$(OutDir)。

一个可行的解决方案似乎是将c#dll复制到每个cpp文件夹中,但我认为这不是正确解决该问题的方法。

我的关闭是通过使用/ p:ReferencePath,如下所示:

  

“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ BuildTools \ MsBuild \ 15.0 \ bin \ MsBuild.exe” / p:BuildProjectReferences = false / p:Configuration =发布/ p:DebugType = full / p:DebugSymbols = true / p:PlatformToolset = v120 /p:WindowsTargetPlatformVersion=8.1 /p:ForceImportBeforeCppTargets="C:\Jenkins\Workspace\Solution\Cpp.props“ / p:OutDir =” C:\ Jenkins \ Workspace \ Solution \ bin \ Release \ x86 \“ / p:Platform = Win32 / t:Build Interface \ Interface.vcxproj / p:ReferencePath =” C:\ jenkins \ workspace \ Solution \ bin \ Release“

我的自定义Cpp.props可以:

<Target Name="Output" BeforeTargets="ResolveAssemblyReferences">
  <Message Text="AssemblySearchPaths: $(AssemblySearchPaths)" />
</Target>

,并通过添加/ p:ReferencePath,将其添加到AssemblySearchPaths中,作为第二条记录,位于{CandidateAssemblyFiles}之后;但仍然找不到这些dll

0 个答案:

没有答案