.net /VisualStudio2010中的链接资源
/linkresource是一个csc选项,允许将程序集链接到其非托管依赖项。将托管程序集添加到GAC时,依赖项将放置在同一文件夹中。这就是所有.NET包装器的安装方式 关于如何在VisualStudio中执行此操作的信息很少。没有官方的答案,只有黑客破解了一个解决方案的人。例如这曾经在VS2008上起作用,但看起来在VS2010上不起作用…:-/ VS2010是否以简单、干净的方式支持LinkResources 提前感谢,,.net /VisualStudio2010中的链接资源,.net,visual-studio,visual-studio-2010,wrapper,gac,.net,Visual Studio,Visual Studio 2010,Wrapper,Gac,/linkresource是一个csc选项,允许将程序集链接到其非托管依赖项。将托管程序集添加到GAC时,依赖项将放置在同一文件夹中。这就是所有.NET包装器的安装方式 关于如何在VisualStudio中执行此操作的信息很少。没有官方的答案,只有黑客破解了一个解决方案的人。例如这曾经在VS2008上起作用,但看起来在VS2010上不起作用…:-/ VS2010是否以简单、干净的方式支持LinkResources 提前感谢,, aalmada我设法在vs2010中实现了这一点,尽管有警告 1)覆
aalmada我设法在vs2010中实现了这一点,尽管有警告 1)覆盖CoreComile以添加链接资源 2)添加一个目标,在添加为
3)如果包含本机库/文件的项目仅包含这些文件,请添加类型/接口。在使用引用的项目中使用此类型。即您使用DllImport的项目。防止编译器优化项目依赖关系
4)点击亚历克斯·雅库宁的复制项目依赖项
这会将所有依赖项拉入my$(TargetDir)以备调试
在项目文件中,我在常规目标文件之后导入magic
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(ProjectDir)..\..\External\CopyDependencies.targets" />
我有一个CopyDependencies.targets,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target
Name="CoreCompile"
Inputs="$(MSBuildAllProjects);
@(Compile);
@(_CoreCompileResourceInputs);
$(ApplicationIcon);
$(AssemblyOriginatorKeyFile);
@(ReferencePath);
@(CompiledLicenseFile);
@(EmbeddedDocumentation);
$(Win32Resource);
$(Win32Manifest);
@(LinkResource);
@(CustomAdditionalCompileInputs)"
Outputs="@(DocFileItem);
@(IntermediateAssembly);
@(_DebugSymbolsIntermediatePath);
$(NonExistentFile);
@(CustomAdditionalCompileOutputs)"
Returns=""
DependsOnTargets="$(CoreCompileDependsOn)"
>
<!-- These two compiler warnings are raised when a reference is bound to a different version
than specified in the assembly reference version number. MSBuild raises the same warning in this case,
so the compiler warning would be redundant. -->
<PropertyGroup Condition="('$(TargetFrameworkVersion)' != 'v1.0') and ('$(TargetFrameworkVersion)' != 'v1.1')">
<NoWarn>$(NoWarn);1701;1702</NoWarn>
</PropertyGroup>
<PropertyGroup>
<!-- If we are building in visual studio setting the CscToolPath will prevent the inproc compiler from being used during compile-->
<CscToolPath Condition="'$(CscToolPath)' == '' and '$(BuildingInsideVisualStudio)' != 'true'" >$(MsBuildToolsPath)</CscToolPath>
</PropertyGroup>
<ItemGroup Condition="'$(TargetingClr2Framework)'=='true'">
<ReferencePath>
<EmbedInteropTypes/>
</ReferencePath>
</ItemGroup>
<PropertyGroup>
<!-- If the user has specified AppConfigForCompiler, we'll use it. If they have not, but they set UseAppConfigForCompiler,
then we'll use AppConfig -->
<AppConfigForCompiler Condition="'$(AppConfigForCompiler)' == '' and '$(UseAppConfigForCompiler)' == 'true'">$(AppConfig)</AppConfigForCompiler>
</PropertyGroup>
<!-- Condition is to filter out the _CoreCompileResourceInputs so that it doesn't pass in culture resources to the compiler -->
<Csc Condition=" '%(_CoreCompileResourceInputs.WithCulture)' != 'true' "
AdditionalLibPaths="$(AdditionalLibPaths)"
AddModules="@(AddModules)"
AllowUnsafeBlocks="$(AllowUnsafeBlocks)"
ApplicationConfiguration="$(AppConfigForCompiler)"
BaseAddress="$(BaseAddress)"
CheckForOverflowUnderflow="$(CheckForOverflowUnderflow)"
CodePage="$(CodePage)"
DebugType="$(DebugType)"
DefineConstants="$(DefineConstants)"
DelaySign="$(DelaySign)"
DisabledWarnings="$(NoWarn)"
DocumentationFile="@(DocFileItem)"
EmitDebugInformation="$(DebugSymbols)"
ErrorReport="$(ErrorReport)"
FileAlignment="$(FileAlignment)"
GenerateFullPaths="$(GenerateFullPaths)"
KeyContainer="$(KeyContainerName)"
KeyFile="$(KeyOriginatorFile)"
LangVersion="$(LangVersion)"
LinkResources="@(LinkResource)"
MainEntryPoint="$(StartupObject)"
ModuleAssemblyName="$(ModuleAssemblyName)"
NoConfig="true"
NoLogo="$(NoLogo)"
NoStandardLib="$(NoCompilerStandardLib)"
NoWin32Manifest="$(NoWin32Manifest)"
Optimize="$(Optimize)"
OutputAssembly="@(IntermediateAssembly)"
PdbFile="$(PdbFile)"
Platform="$(PlatformTarget)"
References="@(ReferencePath)"
Resources="@(_CoreCompileResourceInputs);@(CompiledLicenseFile)"
ResponseFiles="$(CompilerResponseFile)"
Sources="@(Compile)"
TargetType="$(OutputType)"
ToolExe="$(CscToolExe)"
ToolPath="$(CscToolPath)"
TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
UseHostCompilerIfAvailable="$(UseHostCompilerIfAvailable)"
Utf8Output="$(Utf8Output)"
WarningLevel="$(WarningLevel)"
WarningsAsErrors="$(WarningsAsErrors)"
WarningsNotAsErrors="$(WarningsNotAsErrors)"
Win32Icon="$(ApplicationIcon)"
Win32Manifest="$(Win32Manifest)"
Win32Resource="$(Win32Resource)"
/>
<ItemGroup>
<_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" />
</ItemGroup>
<CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''"/>
</Target>
<PropertyGroup>
<CopyLinkedResources Condition="'$(CopyLinkedResources)'==''">true</CopyLinkedResources>
</PropertyGroup>
<PropertyGroup>
<CopyDependencies
Condition="'$(CopyDependencies)'==''">true</CopyDependencies>
<CopyDependenciesPdb
Condition="'$(CopyDependenciesPdb)'==''">true</CopyDependenciesPdb>
<CopyDependenciesXml
Condition="'$(CopyDependenciesXml)'==''">true</CopyDependenciesXml>
</PropertyGroup>
<Target Name="CopyLinkedResources">
<Message Text="Copy Linked Resources"></Message>
<Copy SourceFiles="@(LinkResource->'%(FullPath)')"
DestinationFolder="$(OutputPath)"
SkipUnchangedFiles="true">
<Output TaskParameter="CopiedFiles"
ItemName="LinkResourceCopied" />
</Copy>
<Message Text="Copy Linked Resource: %(LinkResourceCopied.FullPath)" Importance="low"/>
</Target>
<Target Name="CopyIndirectDependencies"
Condition="'$(CopyIndirectDependencies)'=='true'"
DependsOnTargets="DetectIndirectDependencies"
Inputs="@(IndirectDependencyToCopy)"
Outputs="@(MatchingOutputDependency)">
<Copy SourceFiles="@(IndirectDependencyToCopy)"
DestinationFiles="@(MatchingOutputDependency)"
SkipUnchangedFiles="true">
<Output TaskParameter="CopiedFiles"
ItemName="IndirectDependencyCopied" />
</Copy>
<Message Importance="low"
Condition="'%(IndirectDependencyCopied.FullPath)'!=''
and '%(IndirectDependencyCopied.Extension)'!='.pdb'
and '%(IndirectDependencyCopied.Extension)'!='.xml'"
Text="Indirect dependency copied: %(IndirectDependencyCopied.FullPath)" />
</Target>
<Target Name="DetectIndirectDependencies"
DependsOnTargets="ResolveAssemblyReferences">
<Message Importance="low"
Text="Direct dependency: %(ReferencePath.Filename)%(ReferencePath.Extension)" />
<Message Importance="low"
Text="Indirect dependency: %(ReferenceDependencyPaths.Filename)%(ReferenceDependencyPaths.Extension)" />
<!-- Creating indirect dependency list -->
<ItemGroup>
<DetectedIndirectDependency Include="%(ReferenceDependencyPaths.FullPath)"
Condition="'%(ReferenceDependencyPaths.CopyLocal)'=='true'"/>
</ItemGroup>
<ItemGroup Condition="'$(CopyIndirectDependenciesXml)'=='true'">
<DetectedIndirectDependency Include="%(ReferenceDependencyPaths.RootDir)%(ReferenceDependencyPaths.Directory)%(ReferenceDependencyPaths.Filename).xml"
Condition="'%(ReferenceDependencyPaths.CopyLocal)'=='true'" />
</ItemGroup>
<ItemGroup Condition="'$(CopyIndirectDependenciesPdb)'=='true'">
<DetectedIndirectDependency Include="%(ReferenceDependencyPaths.RootDir)%(ReferenceDependencyPaths.Directory)%(ReferenceDependencyPaths.Filename).pdb"
Condition="'%(ReferenceDependencyPaths.CopyLocal)'=='true'"/>
</ItemGroup>
<!-- Work out which dependencies actually exist in the file system -->
<ItemGroup>
<IndirectDependencyToCopy Include="@(DetectedIndirectDependency)"
Condition="Exists('%(DetectedIndirectDependency.Identity)')" />
<MatchingOutputDependency Include="@(IndirectDependencyToCopy->'$(OutputPath)%(Filename)%(Extension)')" />
</ItemGroup>
</Target>
<!-- Build sequence modification -->
<PropertyGroup>
<CoreBuildDependsOn>
$(CoreBuildDependsOn);
CopyDependencies;
CopyLinkedResources
</CoreBuildDependsOn>
</PropertyGroup>
</Project>
美元(诺瓦恩);1701;1702
$(MsBuildToolsPath)
$(AppConfig)
真的
真的
真的
真的
$(CoreBuildDependsOn);
版权依赖;
复制链接资源
非常不幸的是,Visual Studio 2012 RC有一系列新的构建操作,但仍然没有链接资源选项…:-(您有2019 studio的解决方案吗?我添加了您的目标文件并收到错误MSB4057:项目中不存在目标“CopyDependencies”。很抱歉,如果2019年的目标“CopyDependencies”无法正常工作,您需要重新设计它。