.net 我可以将可移植类库中的类或方法限制为特定平台吗?
我正在创建一个可移植类库,目标是.NET4.5、Windows8、WindowsPhone8.1和WindowsPhoneSilverlight8 我可以将类或方法限制为特定的目标吗?方法只能从.Net 4.5项目调用,而不能从Windows Phone 8.1项目调用.net 我可以将可移植类库中的类或方法限制为特定平台吗?,.net,portable-class-library,.net,Portable Class Library,我正在创建一个可移植类库,目标是.NET4.5、Windows8、WindowsPhone8.1和WindowsPhoneSilverlight8 我可以将类或方法限制为特定的目标吗?方法只能从.Net 4.5项目调用,而不能从Windows Phone 8.1项目调用 这可能吗?是的,通过使用指定这些平台的指令。现在我不完全确定是否有一个.NET4.5指令自动可用,但据我所知,有 #SILVERLIGHT、#WINDOWS#U PHONE、#WP8和#NETFX#U CORE指令可用 您可以这
这可能吗?是的,通过使用指定这些平台的指令。现在我不完全确定是否有一个.NET4.5指令自动可用,但据我所知,有
#SILVERLIGHT
、#WINDOWS#U PHONE
、#WP8
和#NETFX#U CORE
指令可用
您可以这样使用它们:
#if WINDOWS_PHONE
int x = 1;
# else
int x = 2;
#endif
在您的情况下,您会将它们放在方法的周围,这样只有在针对正确的项目时,才能编译该方法
我相信#NETFX_CORE
只表明它是Windows8而不是.NET。可能存在特定于.NET的指令,但它们不会自动为您引用的项目设置(可能是因为这些指令使用WinRT,而不是.NET per sé)
但是,表示可以使用自定义指令进行设置:
<DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v4.0' ">
RUNNING_ON_4
</DefineConstants>
在4上运行
这是可行的
例如,您可以使用上下文绑定来注入适当的类型实现,以便此方法调用不会执行任何操作,而另一个实现将执行预期的操作
public abstract class MyBaseClass {
public abstract void MyMethod() { }
}
public class MyDerivedDotNet45Class : MyBaseclass() {
public override void MyMethod() { // Does something... }
}
public class MyDerivedWindowsPhoneClass : MyBaseClass() {
public override void MyMethod() { // Does nothing... }
}
public class MyWorkingProcessClass {
public MyWorkingProcessClass(MyBaseClass baseClass) {
dependency = baseClass;
}
public void MethodThatShallDoSomethingOnlyWhenDotNet45() {
dependency.MyMethod();
}
private readonly MyBaseClass dependency;
}
因此,根据您注入的类,您的程序要么执行某些操作,要么不执行任何操作
在.Net 4.5下
var workingClass = new MyWorkingProcessClass(new MyDerivedDotNet45Class());
wokringClass.MethodThatShallDoSomethingOnlyWhenDotNet45();
这将完成派生类中所述的操作
在Windows Phone下
var workingClass = new MyWorkingProcessClass(new MyDerivedWindowsPhoneClass());
workingClass.MethodThatShallDoSomethingOnlyWhenDotNet45();
这与派生类中的规定无关
使用Ninject
提供了一个很好的使用示例
这是因为你应该构建你的对象组合,这样它就知道在什么地方和什么时候注入什么。这与PCL项目的要点背道而驰。如果你要强迫自己创建单独的构建,那就不用麻烦了。所以我不能只编译一次库,然后一直使用它?我是否必须将源项目包含到我要使用此库的每个项目中?不,使用这些指令只能编译一次。