2012-09-10 13 views
5

मैं the Autofac project पर हमारे सभी सामान्य तर्क को Portable Class Libraries में परिवर्तित करने और विशिष्ट कार्यक्षमता के लिए प्लेटफ़ॉर्म-विशिष्ट पुस्तकालयों को बदलने की कोशिश कर रहा हूं।मैं पोर्टेबल क्लास लाइब्रेरी पर निर्भर पुस्तकालय पर secannotate.exe को सफलतापूर्वक कैसे चला सकता हूं?

मेरी विकास मशीन विंडोज 8 एंटरप्राइज़ (64-बिट) है और मेरे पास सभी ट्रिमिंग के साथ वीएस 2012 अल्टीमेट स्थापित है। मेरे पास कोई पिछली .NET फ्रेमवर्क सामग्री स्थापित नहीं है, कोई अतिरिक्त उपकरण, या कोई अतिरिक्त पीसीएल-विशिष्ट टूलींग। यह सिर्फ आधार सामग्री के साथ एक साफ, नया वीएम है। सब कुछ इस विन्यास में ठीक से चलाता है और परीक्षण करता है।

जब मैं मैं एक त्रुटि दिखाने मैं mscorlib 2.0.5.0 ज़रूरत एक .NET 4.5 (पूर्ण प्रोफ़ाइल) पुस्तकालय है कि पोर्टेबल कक्षा पुस्तकालयों में से एक पर निर्भर करता है पर secannotate.exe को चलाने के लिए प्रयास करते हैं,

यहां एक उदाहरण त्रुटि है। पीसीएल Autofac.dll है; .NET 4.5 पूर्ण प्रोफ़ाइल लाइब्रेरी Autofac.Configuration.dll है।

Error running annotator: Could not find referenced assembly 'Assembly(Name=mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)'. Ensure that the reference paths and assemblies are setup correctly. 
Microsoft (R) .NET Framework Security Transparency Annotator 4.0.30319.17929 
Copyright (C) Microsoft Corporation. All rights reserved. 

Loaded assembly 'Autofac.Configuration' from 'C:\dev\opensource\autofac\trunk\build_output\bin\net40\Autofac.Configuration.dll'. 
Resolving assembly 'Assembly(Name=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)'. 
Loaded assembly 'mscorlib' from 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. 
Loaded referenced assembly from 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. 
Using core assembly: 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' from 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. 
Assembly 'Autofac.Configuration' is using transparency model 'Level 2'. 
Assembly 'mscorlib' is using transparency model 'Level 2'. 
Loaded assembly 'Autofac' from 'C:\dev\opensource\autofac\trunk\build_output\bin\net40\Autofac.dll'. 
Resolving assembly 'Assembly(Name=mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)'. 
    at Microsoft.Security.Tools.CciHostEnvironment.ResolvingAssemblyReference(IUnit referringUnit, AssemblyIdentity referencedAssembly) 
    at Microsoft.Security.Tools.CciHostEnvironment.LoadCoreAssembly() 
    at Microsoft.Security.Tools.CciHostEnvironment..ctor(ISecAnnotateHost host, String rootAssemblyPath) 
    at Microsoft.Security.Tools.SecAnnotate.LoadInputAssemblies() 
    at Microsoft.Security.Tools.SecAnnotate.AnnotateAssemblies() 
    at Microsoft.Security.Tools.SecAnnotate.Main(String[] args) 

Autofac पोर्टेबल कक्षा लाइब्रेरी लक्ष्य: Windows स्टोर के लिए

  • .NET 4.0
  • सिल्वरलाइट 5
  • नेट एप्लिकेशन

आप बनाने के द्वारा इस मुद्दे को दोहराने कर सकते हैं एक नया/खाली पीसीएल उन चीजों को लक्षित करता है और इसे बनाता है। आप इसे mscorlib 2.0.5.0 संदर्भ देखेंगे।

कुछ खोज मुझे विश्वास है कि इस वर्ष सिल्वरलाइट विधानसभा संस्करण के लिए एक संदर्भ है, लेकिन पीसीएल परियोजनाओं विशेष संस्करण संदर्भ की जरूरत नहीं है तो मैं केवल कल्पना कर सकते हैं इस में वी.एस. 2012 PCL उपकरण द्वारा डाल दिया हो रही है। अन्य लोगों ने वीएस 2012 से पहले एक .NET फ्रेमवर्क अपडेट स्थापित करके समान मुद्दों को ठीक किया है। मैं वास्तव में अपनी मशीन पर कहीं भी mscorlib 2.0.5.0 नहीं ढूंढ सकता।

Autofac.dll विधानसभा मैं बनाया पर dotPeek में देख रहे हैं, मैं इसे का संदर्भ देखें:

  • mscorlib 2.0.5.0
  • सिस्टम 2.0.5.0
  • System.ComponentModel.Composition 2.0.5.0
  • System.Core 2.0.5.0

और, फिर से, यह सिर्फ एक पीसीएल परियोजना, सीधे anyth संदर्भित नहीं है आईएनजी। सचमुच - .csproj फ़ाइल में एक संदर्भ संदर्भ नहीं है।

मैं इस सेकैनोटेट समस्या को कैसे हल करूं? क्या मुझे कुछ अतिरिक्त स्थापित करने की आवश्यकता है? क्या कोई पैरामीटर है जिसे मुझे सेकैनोटेट कमांड लाइन में जोड़ना चाहिए?

उत्तर

3

आप, पोर्टेबल लाइब्रेरी संदर्भ विधानसभाओं की ओर इशारा करते,/डी स्विच उत्तीर्ण करने की आवश्यकता उदाहरण के लिए:

secannotate /v "Autofac.Configuration.dll" /d:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0" 

मेक ध्यान दें कि आप मिश्रण डेस्कटॉप और CoreCLR mscorlib आसपास चेतावनी मिल जाएगा, जो क्योंकि अनदेखा किया जा सकता यद्यपि "पोर्टेबल" कोरकॉलर (सिल्वरलाइट) को सेकेंडोटेट करने के लिए दिखता है, यह .NET Framework के संदर्भ में नहीं चलाया जाता है।

+0

कृपया तेजी से =), हम परियोजना में पीसीएल के साथ लाइव नहीं जा सकते .. उत्पादक वातावरण पर इस 2.0.5.0 फ्रेमवर्क असेंबली को संदर्भित करने का कोई तरीका नहीं है ... – benwasd

+0

मैंने जवाब अपडेट किया है। –

+0

यह केवल विकास मशीन पर सत्यापन को हल करता है। नहीं? ग्राहकों पर केवल .NET 4.0 स्थापित किया गया था। मेरी .NET 4.0 लक्षित पीसीएल असेंबली अभी भी लोड नहीं की जा सकती .. – benwasd

1

एमएसकोरिब संस्करण 2.0.5.0 को वीएस2012 से पहले पीसीएल के शुरुआती संस्करण में संदर्भित किया गया था।

एक स्पष्ट तरीका है कि आप इस पर निर्भरता कैसे समाप्त कर सकते हैं। यदि आपने ऑटोफैक-2.6.3.862-पोर्टेबल के साथ शुरू किया है।ज़िप डाउनलोड करें तो आपको Autofac.dll का एक संस्करण मिलेगा जिसमें वास्तव में 2.0.5.0 mscorlib निर्भरता है। कुछ आप ildasm.exe साथ देख सकते हैं, प्रकट डबल क्लिक करके:

// Metadata version: v4.0.30319 
.assembly extern retargetable mscorlib 
{ 
    .publickeytoken = (7C EC 85 D7 BE A7 79 8E)       // |.....y. 
    .ver 2:0:5:0 
} 
.assembly extern retargetable System.Core 
{ 
    .publickeytoken = (7C EC 85 D7 BE A7 79 8E)       // |.....y. 
    .ver 2:0:5:0 
} 
// etc.. 

तो, किसी भी तरह, अपने Autofac.Configuration.dll एक परियोजना है कि Autofac.dll के उस संस्करण संदर्भित के बजाय से बनाया गया था एक जिसे आपने बनाया परियोजना से उस संदर्भ को हटा दें। प्रोजेक्ट का उपयोग करें + संदर्भ जोड़ें और इसके बजाय प्रोजेक्ट टैब का उपयोग करें, अपने ऑटोफैक प्रोजेक्ट को टिकटें।

+1

मैंने सोचा कि वहां एक पुराना संदर्भ भी होना चाहिए, लेकिन मैंने पहले से ही चेक किया है - ऐसा नहीं है। यह सब एक बड़े समाधान में है, सभी परियोजना संदर्भ। ट्रिपल जाँच की। यही कारण है कि यह मुझे स्टंप हो गया है। –

+0

मैंने प्रश्न के लिए कुछ और जानकारी जोड़ दी - असेंबली और संदर्भों के लिए लक्षित प्लेटफॉर्म जो मैं देख रहा हूं। –

संबंधित मुद्दे