dotnet-campus / SourceYard

Add a NuGet package only for dll reference? By using dotnetCampus.SourceYard, you can pack a NuGet package with source code. By installing the new source code package, all source codes behaviors just like it is in your project.
MIT License
50 stars 12 forks source link

WPF源码包引用出错 #114

Open Zhuangkh opened 2 years ago

Zhuangkh commented 2 years ago

如果一个WPF控件类库打包成源码包, 被另一个项目引用时, 如果项目中没有任何xaml文件, 则引用的源码包的控件会爆The name 'InitializeComponent' does not exist in the current context. (项目已启用UseWPF ,obj中不生成.g.i.cs)

此时如果添加任意xaml窗体或控件进入项目, 则可以正常编译.(obj中有源码包的.g.i.cs文件生成)

再将添加的xaml文件删除, 哪怕obj中还是有源码包相关文件, 仍然会报错.

Zhuangkh commented 2 years ago

感觉可能有某个flag需要设置? @lindexi

lindexi commented 2 years ago

@Zhuangkh 也是已知问题之一,原因是缺少 .g 文件,没有此 InitializeComponent 方法。我也在寻找解决方法中

lindexi commented 2 years ago

但是 WPF 的控件作为源代码包有一些锅,例如 XAML 资源获取的方式,通过程序集方式获取将不可行等。因此我不推荐将 WPF 的控件作为源代码包发布

Zhuangkh commented 2 years ago

但是 WPF 的控件作为源代码包有一些锅,例如 XAML 资源获取的方式,通过程序集方式获取将不可行等。因此我不推荐将 WPF 的控件作为源代码包发布

实际上这种场景还是比较少的...碰巧测试到了

Zhuangkh commented 2 years ago
<Target Name="GenerateTempFile" BeforeTargets="CoreCompile" Condition="'$(_TargetAssemblyProjectName)'==''">
  <CallTarget Targets="MarkupCompilePass1" />
</Target>

@lindexi 加了个Target强制生成.g文件来临时解决这个问题, 还没做更多的案例测试