zoom maxed

I'm totally confused about the CRT versions. 

I have a RTM version of VC8, which automatically created an embedded manifest for my app. The manifest has a dependency on version 8.0.50608.0 of the CRT.

According to Ayman Shoukry's Visual C++ Libraries DLL deployment method #2,
http://blogs.msdn.com/aymans/archive/2006/04/04/568466.aspx

I planned to copy the CRT and its manifest together with my app into the same target folder. Basically, I got them from \Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\

The confusion is, those dlls' version is 8.0.50727.42 but not 8.0.50608.0. We cannot count on the redirect magic of the manifest policy that a lot of people talked about in this forum, as some of the target machines are clean system without any WinSxS.

I'm very curious about how the v8.0.50608.0 CRT redirects to the v8.0.50727.42 CRT without the manifest policy, because nowhere mentioned the policy has to be copied as well. Or Ayman Shoukry was missing sth about his deployment method #2

Why v8.0.50608.0 in manifest but v8.0.50727.42 in dlls under redist folder Make no sense to me.

Could someone from Microsoft explain a little bit about this

Thanks,
zoom



Re: Visual C++ General CRT assembly versions confusion :8.0.50608.0 vs 8.0.50727.42

zoom maxed

Any idea

Without the manifest policy, v8.0.50608.0 CRT menifest works fine with the version 8.0.50727.42 dlls. Make no sense at all.

Has anyone seen the version 8.0.50608.0 dlls in your system Absolutely not!

Why not keep them the same version #

 





Re: Visual C++ General CRT assembly versions confusion :8.0.50608.0 vs 8.0.50727.42

Ayman Shoukry - MSFT

Hello,

My understanding is that due to the embeded manifest, the system will try to find the 50608.0 (and not the 50727.42 since there is no policy in your case) version in the SxS directory. If it doesn't find it, it will search in the local directory and hence it will pick up the one you copied. Just make sure that the one you copy is the same one you used while building your application.

Hope this makes it more clear.

Thanks,
Ayman Shoukry
VC++ Team





Re: Visual C++ General CRT assembly versions confusion :8.0.50608.0 vs 8.0.50727.42

Ted.

That's only part of the story.   The way it works for applocal is that the version number embedded in your application EXEs and DLLs has to match the version number that is contained in the applocal Microsoft.VC80.CRT.manifest file.  So for example, on a clean machine with nothing in the WinSxS folder:

Myapp.exe and mydll.dll contain an embedded 8.0.50508.0 reference

The copied Microsoft.VC80.CRT.manifest file must also contain the version number 8.0.50608.0.   The CRT DLLs contained in the same folder as the manifest file can be of any version number (in my experience).

As to your question about the confusing versioning 8.0.50608.0 instead of the proper version number, I think that the original idea was that any beta app already built and shipped (on golive license) would automatically redirect to the RTM version through policies.  But I think they must have forgot to change the _CRT_ASSEMBLY_VERSION in the CRT source code to 8.0.50727.42 before building for RTM versions.    Luckily though, it seems to work, even with the old version number. 

Unfortunately though, the same story cannot be said for MFC80LOC DLLs in SP1.  In this case it was really messed up for applocal (no proper solution)





Re: Visual C++ General CRT assembly versions confusion :8.0.50608.0 vs 8.0.50727.42

zoom maxed

Thank you both.

I am convinced that the mismatch of the CRT assembly manifest version and the corresponding dll version is totally a Microsoft mess. There's no reason to keep the versions differently, as keeping the same version # is obviously the simplest way to check the correct dlls.

However, in SP1, the CRT versions are identical between the manifest and the dlls. For any reason Well, if there is a reason here, the mismatch is unreasonable.

Here's another confusion, I built a dll with the Beta version of VS2005 and an app with the RTM version of VS2005. Both of them are dynamically linked against the CRT. On a clean system without WinSxS, I copied the RTM version (8.0.50608.0) of the CRT manifest and its dlls to the app folder. Guess what, the dll is being loaded and functioning perfect!

But the manifest embedded in the dll actually has a dependency on the CRT version 8.0.50215.4652!!! Shouldn't work, should it confusing.

Could sb explain why my example is working Again, the dll and app are copied to a clean target system without any SxS and policies.

Thanks,

Zoom





Re: Visual C++ General CRT assembly versions confusion :8.0.50608.0 vs 8.0.50727.42

Ted.

I suspect executables and DLLs built with that particular beta version did not have strong checking for CRT DLLs (that mechanism came later). Try the same with RTM and SP1 and you'll see it doesn't work any more (i.e. have DLL built with RTM and app built with SP1 then only copy the SP1 DLLs and manifest) Your RTM DLL will not load.



Re: Visual C++ General CRT assembly versions confusion :8.0.50608.0 vs 8.0.50727.42

zoom maxed

Ted.

I've confirmed that SP1 dll/app won't work with the RTM version of CRT assembly any longer.

Thanks much!