连接Windows Phone 8模拟器到主机

本文关键字:主机 模拟器 Windows Phone 连接 | 更新日期: 2023-09-27 18:04:35

我最近从VS2010升级到VS2012,模拟器现在是虚拟机,这意味着我以前使用/localhost/service/完成的对本地运行的服务的调用现在不再工作。我需要使用实际机器的IP地址,以便呼叫看到它。

这会产生两个问题:1)我经常需要离线工作,所以我不确定是否有一个IP地址可以使用2)这会不会使共享代码变得困难,因为每个人都必须不断更新代码才能在本地运行?

看起来更像是我错过了一些非常简单的东西,因为我还没有看到任何解决这些问题的东西,我可以想象这是一个非常常见的用法。大多数应用程序需要访问外部服务,更有可能的是,如果你在调试中运行,你希望在本地运行它们。

连接Windows Phone 8模拟器到主机

您可以通过在windows phone项目中包含以下T4模板来解决您的问题:

<#@ template language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Management" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Management" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Linq" #>
using System.Net;
public static class SelfIpAddress
{
    public static readonly IPAddress dbgHostAddress = new IPAddress( new byte[ 4 ] { <#= String.Join( ", ", address ) #> } );
}<#+
    static IEnumerable<ManagementObject> searchWmi( string q )
    {
        var mos = new ManagementObjectSearcher( q );
        return mos.Get().Cast<ManagementObject>();
    }
    static byte[] findTheAddress()
    {
        string q1 = @"SELECT * FROM Win32_NetworkAdapter where ServiceName='VMSMP' and NetConnectionID is not NULL";
        ManagementObject adapter = searchWmi( q1 ).Where( mo => mo[ "NetConnectionID" ].ToString().Contains( "Emulator Internal Switch" ) ).FirstOrDefault();
        if( null == adapter )
            throw new Exception( "Network adapter was not found" );
        int interfaceIndex = int.Parse( adapter[ "InterfaceIndex" ].ToString() );
        string q2 = @"SELECT * FROM Win32_NetworkAdapterConfiguration where InterfaceIndex = " + interfaceIndex.ToString();
        ManagementObject adapterConfig = searchWmi( q2 ).FirstOrDefault();
        string address = ( adapterConfig[ "IPAddress" ] as string[] ).FirstOrDefault();
        if( null == address )
            throw new Exception( "Network adapter has no address" );
        return address.Split( '.' ).Select( c => byte.Parse( c ) ).ToArray();
    }
    readonly byte[] address = findTheAddress();
#>

在我的机器上,它产生以下源文件:

using System.Net;
public static class SelfIpAddress
{
    public static readonly IPAddress dbgHostAddress = new IPAddress( new byte[ 4 ] { 169, 254, 80, 80 } );
}

然后在你的代码中,你可以使用SelfIpAddress.dbgHostAddress值访问你的主机。就像其他参与这个项目的人一样。要刷新值,按BUILD,然后按Transform All T4 Templates