2015-07-10 2 views
0

Возможно ли загрузить версию сборки в чистый код XAML? Я нашел это здесь:Получить версию сборки в чистом XAML GetExecutingAssembly

http://www.widecodes.com/0mHWVVkWeV/is-it-possible-to-bind-a-textblocks-text-to-an-applications-assemblyversion.html

Но он всегда возвращается 4.0.0

<TextBlock xmlns:ref="clr-namespace:System.Reflection;assembly=mscorlib"> 
    <TextBlock.Text> 
     <Binding Path="Version"> 
      <Binding.Source> 
       <ObjectDataProvider MethodName="GetName"> 
        <ObjectDataProvider.ObjectInstance> 
         <ObjectDataProvider MethodName="GetExecutingAssembly" 
              ObjectType="{x:Type ref:Assembly}" /> 
        </ObjectDataProvider.ObjectInstance> 
       </ObjectDataProvider> 
      </Binding.Source> 
     </Binding> 
    </TextBlock.Text> 
</TextBlock> 

Тогда я попробовал это здесь: (который работает идеально, если бежит App)

<TextBlock Grid.Row ="0" Grid.Column="0" xmlns:ref="clr-namespace:System.Reflection;assembly=mscorlib" xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <TextBlock.Text> 
     <Binding Path="Version"> 
      <Binding.Source> 
       <ObjectDataProvider MethodName="GetName"> 
        <ObjectDataProvider.ObjectInstance> 
         <ObjectDataProvider MethodName="ReflectionOnlyLoadFrom" 
              ObjectType="{x:Type ref:Assembly}"> 
          <ObjectDataProvider.MethodParameters> 
           <sys:String>.\Modules\Myassembly.dll</sys:String> 
          </ObjectDataProvider.MethodParameters> 
         </ObjectDataProvider> 
        </ObjectDataProvider.ObjectInstance> 
       </ObjectDataProvider> 
      </Binding.Source> 
     </Binding> 
    </TextBlock.Text> 
</TextBlock> 

Но теперь конструктор говорит (хочет найти сборку в System32)

Could not load file or assembly 'file:///C:\Windows\system32\Modules\MyAssembly.dll' or one of its dependencies. The system cannot find the file specified. 
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) 
+0

Thanks LightBulb для просмотра макета – Seppl

ответ

2

Попробуйте использовать GetEntryAssembly вместо GetExecutingAssembly с первым примером. Для меня это проявляется как 14.0.0.0 в дизайнере, но верно, когда приложение запускается.

<ObjectDataProvider MethodName="GetName"> 
     <ObjectDataProvider.ObjectInstance> 
      <ObjectDataProvider MethodName="GetEntryAssembly" ObjectType="{x:Type ref:Assembly}" /> 
     </ObjectDataProvider.ObjectInstance> 
    </ObjectDataProvider> 
Смежные вопросы