我即将开始研究一些遗留代码,特别是Silverlight组件。我需要确定哪个Silverlight版本用于此组件,因此我不安装不需要的软件(特别是DevExpress Silverlight)或者必须做任何无关的工作。
答案 0 :(得分: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)的版本,您可以使用.NET Reflector或similar reflection工具来自XAP文件的DLL。要获取此DLL,请将XAP扩展名更改为ZIP并使用您喜欢的ZIP实用程序。
以下javascript使您可以获取已安装的Silverlight运行时的版本。这基于this blog处的代码(现在似乎已被破解)。我记得编辑它以添加一些额外的浏览器等。
要获取该版本,请使用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();
});
答案 1 :(得分:0)
一种方法可能是打开一个项目文件(.csproj / .vbproj)并找到TargetFrameworkIdentifier。
以Silverlight 4为目标的项目:
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>`
针对Silverlight 5的项目:
<TargetFrameworkVersion>v5.0</TargetFrameworkVersion>