xBimTeam / XbimGeometry

XbimGeometry contains the CLR interop libraries and the c++ engine used to compute the 3D geometry of models.
https://xbimteam.github.io/
Other
255 stars 128 forks source link

Xbim.Geometry.Engine64.dll And Xbim.Geometry.Engine32.dll build folder issue. #455

Closed untecnologo closed 10 months ago

untecnologo commented 11 months ago

Short summary describing the issue. (3-5 sentences) I have a project where xbim.geometry nugget package is installed called WT.IO Since I installed the package both DLL files have been created in that project and ignored by the git. image

I have another project called WT.WEB which is my building project and has references to WT.IO In the build not neither Xbim.Geometry.Engine64.dll nor Xbim.Geometry.Engine32.dll are copied to the bin folder.

image

I think this is not working as expected. https://github.com/xBimTeam/XbimGeometry/blob/master/Xbim.Geometry.Engine.Interop.targets

Because the files are being generated in the wrong place and both of them at the same time.

My WT.IO folder bin: image

The main error is image

If I manually copy Xbim.Geometry.Engine64.dll into the bin folder of WT.WEB (My main project), it works.

Why the files are being generated both of them and in the wrong place? I also tried, installing the nugget package in WT.WEB but the problem is both files are generated and the system crashes because Xbim.Geometry.Engine32.dll is not supposed to be generated.

andyward commented 11 months ago

See https://github.com/xBimTeam/XbimGeometry/issues/380#issuecomment-1216978804 for some background

Basically the native assemblies are only copied to the bin folder on the project the nuget is directly added to. This is addressed in the upcoming v6 version where we copy transitive dependencies.

As you've noted, a v5 workaround is to add the xbim.Geometry.Engine.Interop package to your top level WT.Web project explicitly.

To fix the issue where both 32 bit and 64 bit are copied, set the platform of WT.Web to be x64 , rather than Any CPU. (Note the build script checks the platform)

untecnologo commented 11 months ago

@andyward Really thank you for your support I will let you know more details after fixing it because I know there are too many questions from other developers about this behavior.

untecnologo commented 11 months ago

@andyward After the solution you recommended to me, We were able to fix the issue. Then another issue happens. The dll (x86) was created locally but at the moment of the deployment, the file Xbim.Geometry.Engine32.dll is missing after the pipelines run. We made some changes and tested the references, config etc. In the end, we just copied the dll manually using FTP in the server because there was no way to do it for us.

I commented this here just in case someone else has the same problem and maybe our workaround can be useful but not recommended as a good practice.

I have just one question, will the new version be compatible with 4.8 Framework and when is it expected to be released? Thank you for your time we really appreciate your support and your work.

andyward commented 11 months ago

Re Pipeline deployment, have you tried adding this to your project file:

<ItemGroup>
    <None Update="Xbim.Geometry.Engine32.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </None>
</ItemGroup>

On v6 geometry, yes it will support both net Framework (net472 upward) and net Core (net6).

It's not far off, we just need a week or 2 tidying up and merging. We've been running feature branch builds internally for 6+ months