1

我即将开始处理一些遗留代码,特别是 Silverlight 组件。我需要确定用于此组件的 Silverlight 版本,这样我就不会安装不需要的软件(特别是 DevExpress Silverlight)或做任何无关的工作。

4

2 回答 2

0

项目版本

要找出您的项目需要构建的 Silverlight(或其他引用的程序集,例如 DevExpress)的版本,您可以查看项目文件中的项目引用。

在下面的示例中,您可以看到作为Include属性的一部分声明的版本。

<Reference Include="System.Windows.Controls, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\System.Windows.Controls.dll</HintPath>
</Reference>

构建的组件或应用程序版本

要确定构建特定组件所依据的 Silverlight(或其他引用的程序集,例如 DevExpress)的版本,您可以在 XAP 文件中的 DLL 上使用.NET Reflector类似的 反射工具。要获取此 DLL,请将 XAP 扩展名更改为 ZIP 并使用您最喜欢的 ZIP 实用程序。

Silverlight 运行时版本

以下 javascript 使您能够获取已安装 Silverlight 运行时的版本。这是基于在此博客上找到的代码(现在似乎已损坏)。我记得编辑它以添加一些额外的浏览器等。

要获取版本,请使用Silverlight.version.

// Determines the version of the Silverlight runtime.
// Taken from http://blog.mdk-photo.com/post/Detecting-Silverlight-version-installed.aspx

if (!window.Silverlight)
    window.Silverlight = {};

Silverlight.ua = null;

///////////////////////////////////////////////////////////////////////////////
// detectSilverlightVersion
///////////////////////////////////////////////////////////////////////////////
function detectSilverlightVersion() {
    var container;
    var silverlightVersion;

    var BinarySearch = function (control, versionNumbers, indx, min, max) {
        if (max < min)
            return -1 // not found

        if (min == max)
            return min
        else {
            versionNumbers[indx] = Math.ceil(min + ((max - min) / 2))
            var isSupported = control.IsVersionSupported(buildVersionString(versionNumbers))
            if (!isSupported)
                return BinarySearch(control, versionNumbers, indx, min, versionNumbers[indx] - 1)
            else
                return BinarySearch(control, versionNumbers, indx, versionNumbers[indx], max)
        }
    }

    var buildVersionString = function (versionNumbers) {
        var versionString = "";
        for (var l = 0; l < versionNumbers.length; ++l) {
            versionString += versionNumbers[l];
            if (l != versionNumbers.length - 1)
                versionString += ".";
        }
        return versionString;
    }

    try {
        var control = null;

        if (Silverlight.ua != null && Silverlight.ua.Browser == 'MSIE') {
            control = new ActiveXObject('AgControl.AgControl');
        }
        else {
            if (navigator.plugins["Silverlight Plug-In"]) {
                container = document.createElement("div")
                document.body.appendChild(container);
                container.innerHTML = '<embed type="application/x-silverlight" />';
                control = container.childNodes[0];
            }
        }

        if (control.Settings) {
            try {
                silverlightVersion = control.Settings.version;
            }
            catch (z) {
            }
        }

        if (!silverlightVersion) {
            var major = 0;
            var minor = 0;
            var revision = 0;
            var build = 0;

            var buildVersionString = function (versionNumbers) {
                var versionString = "";
                for (var l = 0; l < versionNumbers.length; ++l) {
                    versionString += versionNumbers[l];
                    if (l != versionNumbers.length - 1)
                        versionString += ".";
                }
                return versionString;
            }

            var versionNumbers = [0, 0, 0, 0];

            if (arguments[0]) {
                for (var i = 0; i < versionNumbers.length; ++i) {
                    for (var incrementor = 0; incrementor < 100000; ++incrementor) {
                        versionNumbers[i] = incrementor;

                        if (!control.IsVersionSupported(buildVersionString(versionNumbers))) {
                            versionNumbers[i] = incrementor - 1;
                            break;
                        }
                    }
                }
            } else {
                versionNumbers[0] = BinarySearch(control, versionNumbers, 0, 0, 20);
                versionNumbers[1] = BinarySearch(control, versionNumbers, 1, 0, 20);
                versionNumbers[2] = BinarySearch(control, versionNumbers, 2, 0, 100000);
                versionNumbers[3] = BinarySearch(control, versionNumbers, 3, 0, 20);
            }
            silverlightVersion = buildVersionString(versionNumbers);
        }

        control = null;
    }
    catch (e) {

    }

    if (container) {
        container.parentNode.removeChild(container);
    }

    if (!silverlightVersion)
        silverlightVersion = "Not installed!";

    return silverlightVersion;
}

///////////////////////////////////////////////////////////////////////////////
// detectUserAgent Parses UA string and stores relevant data in Silverlight.ua.
///////////////////////////////////////////////////////////////////////////////
Silverlight.detectUserAgent = function () {
    var ua = window.navigator.userAgent;

    Silverlight.ua = { OS: 'Unsupported', Browser: 'Unsupported' };

    //Silverlight does not support pre-Windows NT platforms
    if (ua.indexOf('Windows NT') >= 0) {
        Silverlight.ua.OS = 'Windows';
    }
    else if (ua.indexOf('PPC Mac OS X') >= 0) {
        Silverlight.ua.OS = 'MacPPC';
    }
    else if (ua.indexOf('Intel Mac OS X') >= 0) {
        Silverlight.ua.OS = 'MacIntel';
    }

    if (Silverlight.ua.OS != 'Unsupported') {
        if (ua.indexOf('MSIE') >= 0) {
            if (navigator.userAgent.indexOf('Win64') == -1) {
                if (parseInt(ua.split('MSIE')[1]) >= 6) {
                    Silverlight.ua.Browser = 'MSIE';
                }

            }
        }
        else if (ua.indexOf('Firefox') >= 0) {
            var version = ua.split('Firefox/')[1].split('.');
            var major = parseInt(version[0]);
            if (major >= 2) {
                Silverlight.ua.Browser = 'Firefox';
            }
            else {
                var minor = parseInt(version[1]);
                if ((major == 1) && (minor >= 5)) {
                    Silverlight.ua.Browser = 'Firefox';
                }
            }
        }

        else if (ua.indexOf('Chrome') >= 0) {
            Silverlight.ua.Browser = 'Chrome';
        }

        else if (ua.indexOf('Safari') >= 0) {
            Silverlight.ua.Browser = 'Safari';
        }

        else if (ua.indexOf('Opera') >= 0) {
            Silverlight.ua.Browser = 'Opera';
        }
    }
}

// Detect the user agent at script load time
Silverlight.detectUserAgent();

$(this).ready(function () {
    Silverlight.version = detectSilverlightVersion();
});
于 2012-08-21T15:59:23.827 回答
0

一种方法可能是打开您的项目文件之一 (.csproj / .vbproj) 并找到 TargetFrameworkIdentifier。

针对 Silverlight 4 的项目:

<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>`

针对 Silverlight 5 的项目:

<TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
于 2012-08-21T22:02:59.840 回答